我为带有代码接收和模块Laravel5,REST的Laravel应用编写测试。
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
的每个调用都被再次删除,除了第一个初始化应用程序,并且Queue::fake
的某些配置被清除。]
决定之一是每个测试一个请求。在测试中发出多个请求后,是否还有另一种工作方式Queue::fake
?
我为带有代码接收和模块Laravel5,REST的Laravel应用编写测试。 api测试之一:公共功能testEmailRegistration(ApiTester $ I){... //数据不正确$ I-> sendPOST($ route,[...
我不确定为什么Laravel模块会这样做,但是我找到了一种解决方法,可以让您使用假货: