Queue :: fake не работает с модулем кодирования Laravel5 - PullRequest
0 голосов
/ 25 марта 2020

Я пишу тест для 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, когда в тесте делают более одного запроса?

...