断言具有 Laravel 黄昏的队列中的作业

断言具有 Laravel 黄昏的队列中的作业

原文:https://medium.com/hackernoon/asserting-jobs-in-queue-with-laravel-dusk-adb03654ca43

当使用 Laravel Dusk 编写端到端测试时,您不能像在 Laravel 5.3 中那样模仿您的作业调度,因为浏览器是一个独立的进程,当浏览器访问应用程序时,您在测试中所做的任何调整都不存在。浏览器将再次引导整个应用程序。我的解决方法是通过一些简单的步骤简单地断言该作业在队列中等待调度。

设置使用数据库的黄昏队列

打开您的 config/queue.php 文件,专门为 Dusk 设置一个队列。将焦点放在数组的key中定义的连接名queue索引中定义的队列名上。

'connections' => [

    'database' => [
        'driver' => 'database',
        'table' => 'jobs',
        'queue' => 'default',
        'retry_after' => 90,
    ],

 **'dusk-connection' => [
        'driver' => 'database',
        'table' => 'jobs',
        'queue' => 'dusk-queue',
        'retry_after' => 90,
    ],**
]

黄昏环境

在您的.env.dusk.local文件中,将QUEUE_DRIVER设置为dusk-connection。特别关注黄昏如何交换环境。

确保作业表存在

如果还没有,运行php artisan queue:table作业表创建一个迁移,然后运行php artisan migrate对数据库运行新创建的迁移。

向 DuskTestCase.php 添加自定义断言

如果你已经安装了 Dusk,你会注意到它创建了文件 tests/DuskTestCase.php 。让我们在这个文件中添加一个自定义断言。 注:我们希望弹出黄昏队列中的下一个可用作业,这是在设置步骤中选择的队列名称。

*/**
 * Asserts that Jobs are in Queue to be dispatched.
 *
 ** ***@param*** *array|string $queued
 */* **public function** assertQueued($queued) {
    **if** (!is_array($queued))
        $queued = func_get_args();

    $repository = app()->make(
        \Illuminate\Contracts\Queue\Queue::*class* );

    **foreach** ($queued **as** $item) {
        $job = $repository->pop('dusk-queue');
        $this->assertTrue($job->resolveName() == $item);
    }
}

测试你的工作!

对于这个例子,我通过运行php artisan make:job MyFirstJobphp artisan make:job MySecondJob创建了两个示例作业,分别名为MyFirstJobMySecondJobassertQueued将接受多个参数、一个参数数组或仅仅一个合格的类。

Route::*get*('/', **function** () {
    dispatch(**new** \App\Jobs\MySecondJob);
    dispatch(**new** \App\Jobs\MyFirstJob);
    **return** view('welcome');
});**public function** testBasicExample()
{
    $this->browse(**function** (Browser $browser) {
        $browser->visit('/')
                ->assertSee('Laravel');
    });

    $this->assertQueued([MyFirstJob::*class*, MySecondJob::*class*]);
}

结论

Dusk 将导航到您的应用程序,触发一些事件,使用QUEUE_DRIVER=dusk-connection将作业在jobs表中排队。然后,您可以断言这个作业在 Dusk 本身的数据库中。但是请注意:您需要确保您的测试构建了一个干净的数据库,并在每次测试时都将其拆除,否则弹出下一个作业可能不会像预期的那样工作。

黑客中午是黑客如何开始他们的下午。我们是 @AMI 家庭的一员。我们现在接受投稿,并乐意讨论广告&赞助机会。

如果你喜欢这个故事,我们推荐你阅读我们的最新科技故事趋势科技故事。直到下一次,不要把世界的现实想当然!


本站为非盈利网站,作品由网友提供上传,如无意中有侵犯您的版权,请联系删除