Посев Lumen 5.1 с выходными данными тестов

Чтобы иметь возможность запускать интеграционные тесты с тестированием базы данных, я написал сидер, который заполняет таблицу Messages поддельными сообщениями для поддельного, только что созданного пользователя. Затем идентификатор этого пользователя требуется для получения сообщений, поэтому внутри класса сеялки я просто распечатываю его идентификатор.

Затем в тесте я вызываю следующее:

$output = new BufferedOutput;
$exitCode = \Artisan::call('db:seed', ['--class' => UserMessagesSeeder'], $output);

Это должно позволить мне получить вывод со следующим:

$output->fetch()

Однако приведенное выше всегда возвращает значение null.

Я что-то делаю не так? Или, может быть, есть лучший способ вызвать сеялку? Должен ли я просто включить всю фабрику в свой класс тестирования и вызывать ее при необходимости? Это кажется громоздким, если честно.


person peterstarling    schedule 04.03.2016    source источник
comment
Подождите, вы делаете вызов Artisan из другого сеялки?   -  person Pitchinnate    schedule 04.03.2016
comment
нет, это внутри теста phpunit, в классе, который расширяет TestCase   -  person peterstarling    schedule 04.03.2016


Ответы (1)


Таким образом, очевидно, что есть простой обходной путь, вместо того, чтобы запускать команду кустарного посева, класс Seeder можно использовать внутри теста следующим образом:

$seeder = new UserMessagesSeeder;
$user_id = $seeder->run();

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

person peterstarling    schedule 07.03.2016