Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Can't use Laravel's built in DB Mock in a Codeception run #19

Open
timbroder opened this issue Sep 10, 2017 · 5 comments
Open

Can't use Laravel's built in DB Mock in a Codeception run #19

timbroder opened this issue Sep 10, 2017 · 5 comments
Assignees

Comments

@timbroder
Copy link
Contributor

What are you trying to achieve?

Use Laravel's built in DB Mock in a Codeception run

Note: This works in 2.2.9 but breaks in 2.2.10

What do you get instead?

./vendor/bin/codecept run -f -d unit Traits/
Codeception PHP Testing Framework v2.2.10
Powered by PHPUnit 4.8.27 by Sebastian Bergmann and contributors.

  Rebuilding UnitTester...

Unit Tests (7) ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Modules: Laravel5, Asserts, \Helper\Unit, Mockery, Db
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
✔ DatabaseToolsUnitTest: Date_modify_works_for_postgres (0.06s)


  [BadMethodCallException]
  Method Mockery_0_Illuminate_Database_DatabaseManager::getConnections() does not exist on this mock object


Exception trace:
 () at /Users/timbroder/workspace/kidfund/web/vendor/mockery/mockery/library/Mockery/Loader/EvalLoader.php(16) : eval()'d code:709
 Mockery_0_Illuminate_Database_DatabaseManager->_mockery_handleMethodCall() at /Users/timbroder/workspace/kidfund/web/vendor/mockery/mockery/library/Mockery/Loader/EvalLoader.php(16) : eval()'d code:857
 Mockery_0_Illuminate_Database_DatabaseManager->getConnections() at /Users/timbroder/workspace/kidfund/web/vendor/codeception/codeception/src/Codeception/Module/Laravel5.php:203
 Codeception\Module\Laravel5->_after() at /Users/timbroder/workspace/kidfund/web/vendor/codeception/codeception/src/Codeception/Subscriber/Module.php:68
 Codeception\Subscriber\Module->after() at n/a:n/a
 call_user_func() at /Users/timbroder/workspace/kidfund/web/vendor/symfony/event-dispatcher/EventDispatcher.php:174
 Symfony\Component\EventDispatcher\EventDispatcher->doDispatch() at /Users/timbroder/workspace/kidfund/web/vendor/symfony/event-dispatcher/EventDispatcher.php:43
 Symfony\Component\EventDispatcher\EventDispatcher->dispatch() at /Users/timbroder/workspace/kidfund/web/vendor/codeception/codeception/src/Codeception/PHPUnit/Listener.php:126
 Codeception\PHPUnit\Listener->fire() at /Users/timbroder/workspace/kidfund/web/vendor/codeception/codeception/src/Codeception/PHPUnit/Listener.php:112
 Codeception\PHPUnit\Listener->endTest() at /Users/timbroder/workspace/kidfund/web/vendor/phpunit/phpunit/src/Framework/TestResult.php:340
 PHPUnit_Framework_TestResult->endTest() at /Users/timbroder/workspace/kidfund/web/vendor/phpunit/phpunit/src/Framework/TestResult.php:733
 PHPUnit_Framework_TestResult->run() at /Users/timbroder/workspace/kidfund/web/vendor/phpunit/phpunit/src/Framework/TestCase.php:724
 PHPUnit_Framework_TestCase->run() at /Users/timbroder/workspace/kidfund/web/vendor/phpunit/phpunit/src/Framework/TestSuite.php:747
 PHPUnit_Framework_TestSuite->run() at /Users/timbroder/workspace/kidfund/web/vendor/codeception/codeception/src/Codeception/PHPUnit/Runner.php:106
 Codeception\PHPUnit\Runner->doEnhancedRun() at /Users/timbroder/workspace/kidfund/web/vendor/codeception/codeception/src/Codeception/SuiteManager.php:157
 Codeception\SuiteManager->run() at /Users/timbroder/workspace/kidfund/web/vendor/codeception/codeception/src/Codeception/Codecept.php:184
 Codeception\Codecept->runSuite() at /Users/timbroder/workspace/kidfund/web/vendor/codeception/codeception/src/Codeception/Codecept.php:153
 Codeception\Codecept->run() at /Users/timbroder/workspace/kidfund/web/vendor/codeception/codeception/src/Codeception/Command/Run.php:288
 Codeception\Command\Run->execute() at /Users/timbroder/workspace/kidfund/web/vendor/symfony/console/Command/Command.php:259
 Symfony\Component\Console\Command\Command->run() at /Users/timbroder/workspace/kidfund/web/vendor/symfony/console/Application.php:847
 Symfony\Component\Console\Application->doRunCommand() at /Users/timbroder/workspace/kidfund/web/vendor/symfony/console/Application.php:192
 Symfony\Component\Console\Application->doRun() at /Users/timbroder/workspace/kidfund/web/vendor/symfony/console/Application.php:123
 Symfony\Component\Console\Application->run() at /Users/timbroder/workspace/kidfund/web/vendor/codeception/codeception/src/Codeception/Application.php:103
 Codeception\Application->run() at /Users/timbroder/workspace/kidfund/web/vendor/codeception/codeception/codecept:36

Provide test source code if related

     /**
     * @test
     */
    public function date_modify_works_for_postgres()
    {
        DB::shouldReceive('getDriverName')
            ->once()
            ->andReturn('pgsql');

        $return = $this->dateModify('field_name', '10', '-', 'month');

        $this->assertEquals("field_name - INTERVAL '10' month", $return);
    }

Details

  • Codeception version: 2.2.10
  • PHP Version: 2.3.5
  • Operating System: OSX 10.12.6
  • Installation type: Composer
  • List of installed packages gist
  • Suite configuration: Using Codeceptions tests
@Naktibalda
Copy link
Member

Caused by Codeception/Codeception#4032
@rmblstrp @janhenkgerritsen any comments?

@timbroder
Copy link
Contributor Author

I should also mention I'm running Laravel 5.2.45

@janhenkgerritsen
Copy link
Contributor

@Naktibalda I actually resigned as maintainer of the Laravel module a month ago

@Naktibalda
Copy link
Member

@janhenkgerritsen sorry, I missed that.

@timbroder it is up to you to fix this issue then.
I think that it could be fixed either by wrapping foreach ($db->getConnections() as $connection) { with if (method_exists($db, 'getConnections')
or by adding a check that $db isn't a mock to if ($db instanceof \Illuminate\Database\DatabaseManager) {

@timbroder
Copy link
Contributor Author

@Naktibalda I can take this one but it may be a few weeks. Once this release goes out I'll investigate a test and PR. You can assign this to me

Thanks

@Naktibalda Naktibalda transferred this issue from Codeception/Codeception Jan 9, 2021
@TavoNiievez TavoNiievez changed the title Method Mockery_0_Illuminate_Database_DatabaseManager::getConnections() does not exist on this mock object starting in 2.2.10 Can't use Laravel's built in DB Mock in a Codeception run Jan 19, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants