ModelFactory: Ошибка: вызов функции-члена connection () в null - PullRequest
0 голосов
/ 20 сентября 2018

Пытаясь заполнить базу данных с помощью ModelFactory, я сталкиваюсь с этой ошибкой, я искал последние шесть часов, кажется, не могу ее исправить.

Мой тест запускает это:

$books = factory('App\Book', 2)->create();

и сообщение об ошибке таково:

There was 1 error:

1) Tests\App\Http\Controllers\BooksControllerTest::testIndexReturnsCollection
Error: Call to a member function connection() on null

D:\Code\Server\htdocs\rlfp.localhost.com\vendor\illuminate\database\Eloquent\Model.php:1234
D:\Code\Server\htdocs\rlfp.localhost.com\vendor\illuminate\database\Eloquent\Model.php:1200
D:\Code\Server\htdocs\rlfp.localhost.com\vendor\illuminate\database\Eloquent\Model.php:1030
D:\Code\Server\htdocs\rlfp.localhost.com\vendor\illuminate\database\Eloquent\Model.php:945
D:\Code\Server\htdocs\rlfp.localhost.com\vendor\illuminate\database\Eloquent\Model.php:983
D:\Code\Server\htdocs\rlfp.localhost.com\vendor\illuminate\database\Eloquent\FactoryBuilder.php:203
D:\Code\Server\htdocs\rlfp.localhost.com\vendor\illuminate\support\Collection.php:407
D:\Code\Server\htdocs\rlfp.localhost.com\vendor\illuminate\database\Eloquent\FactoryBuilder.php:207
D:\Code\Server\htdocs\rlfp.localhost.com\vendor\illuminate\database\Eloquent\FactoryBuilder.php:185
D:\Code\Server\htdocs\rlfp.localhost.com\tests\app\Http\Controllers\BooksControllerTest.php:35

В моем загрузочном файле / app.php у меня есть строки 26 и 28, например:

$app->withFacades();

$app->withEloquent();

В то время как мой phpunit.xml выглядит так:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
         backupStaticAttributes="false"
         bootstrap="bootstrap/app.php"
         colors="true"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         processIsolation="false"
         stopOnFailure="false">
    <testsuites>
        <testsuite name="Application Test Suite">
            <directory suffix="Test.php">./tests</directory>
        </testsuite>
    </testsuites>
    <filter>
        <whitelist processUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">./app</directory>
        </whitelist>
    </filter>
    <php>
        <env name="APP_ENV" value="testing"/>
        <env name="CACHE_DRIVER" value="array"/>
        <env name="QUEUE_DRIVER" value="sync"/>
        <env name="DB_DATABASE" value="rlp_rlfpsfactory"/>
    </php>
</phpunit>

Нужно ли мне помещать что-либо еще в php-часть phpunit xml-файла?

1 Ответ

0 голосов
/ 21 сентября 2018

Проведя целый день без удачи, благодаря @ChrisSprague я понизил Lumen до 5.6, и это сработало.

Шаги:

  1. В файле composer.jsonизменить

    "laravel/lumen-framework": "5.7.*"
    

    на

    "laravel/lumen-framework": "5.6.*"
    
  2. Удалить папку vendor

  3. Do composer install
  4. Запустите тест снова!

Если он все еще не работает, убедитесь, что у вас есть правильные данные базы данных теста в вашем файле phpunit.xml

Моя выглядит так:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
         backupStaticAttributes="false"
         bootstrap="bootstrap/app.php"
         colors="true"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         processIsolation="false"
         stopOnFailure="false">
    <testsuites>
        <testsuite name="Application Test Suite">
            <directory suffix="Test.php">./tests</directory>
        </testsuite>
    </testsuites>
    <filter>
        <whitelist processUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">./app</directory>
        </whitelist>
    </filter>
    <php>
        <env name="APP_ENV" value="testing"/>
        <env name="CACHE_DRIVER" value="array"/>
        <env name="QUEUE_DRIVER" value="sync"/>
        <env name="SESSION_DRIVER" value="array"/>
        <env name="DB_DATABASE" value="rlp_rlfpsfactory"/> <!-- this is testing database -->
        <env name="DB_USERNAME" value="root"/>
        <env name="DB_PASSWORD" value=""/>
    </php>
</phpunit>
...