Я пишу тест для Laravel приложения с кодировкой и модулями Laravel5 , REST .
Один из тестов API:
public function testEmailRegistration(ApiTester $I) {
...
// Not correct data
$I->sendPOST($route, [
'first_name' => (string)$this->faker->randomNumber(),
'password' => $this->faker->password(1, 7),
'email' => 'not_valid_email',
]);
$I->seeResponseCodeIs(HttpCode::UNPROCESSABLE_ENTITY);
// Correct data
\Illuminate\Support\Facades\Queue::fake();
$I->sendPOST($route, [
'first_name' => $firstName,
'password' => $password,
'email' => $email,
]);
\Illuminate\Support\Facades\Queue::assertPushed(\App\Jobs\SendEmail::class);
...
}
Я отправляю запросы на неверные и правильные данные и делаю некоторые утверждения. Кроме того, я проверяю, что это задание присутствует в очереди.
После выполнения теста выдает ошибку:
[Error] Call to undefined method Illuminate\Queue\SyncQueue::assertPushed()
После Queue:fake
фасад \Illuminate\Support\Facades\Queue
должен разрешиться в QueueFake
, но фактически это все еще QueueManager
, таким образом, функция assertPushed
не определена.
Выполнение $I->sendPOST()
сброс вызова Queue::fake
. Это произошло в laravel 5 модуле \Codeception\Lib\Connector\Laravel5
, метод doRequest
.
protected function doRequest($request)
{
if (!$this->firstRequest) {
$this->initialize($request);
}
$this->firstRequest = false;
$this->applyBindings();
$this->applyContextualBindings();
$this->applyInstances();
$this->applyApplicationHandlers();
$request = Request::createFromBase($request);
$response = $this->kernel->handle($request);
$this->app->make('Illuminate\Contracts\Http\Kernel')->terminate($request, $response);
return $response;
}
Каждый вызов doRequest
, кроме первого приложения init, снова и некоторые конфигурации, такие как Queue::fake
, очищаются.
Одним из решений является один запрос на тест. Есть ли другой вариант для работы Queue::fake
, когда в тесте делают более одного запроса?