Queue :: fake在Laravel5代码接收模块中不起作用

问题描述 投票:0回答:1

我为带有代码接收和模块Laravel5REST的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,[...

php laravel codeception
1个回答
0
投票

我不确定为什么Laravel模块会这样做,但是我找到了一种解决方法,可以让您使用假货:

© www.soinside.com 2019 - 2024. All rights reserved.