在 codeception 中测试 Beanstalkd 作业

Testing Beanstalkd jobs in codeception

我目前正在将 Banstalkd 引入我的 Yii2 项目,但我在测试时遇到了一些问题。一个例子是测试发送的邮件,之前,当单元测试同步时,我验证了邮件是否发送,以及正确的电子邮件格式,以及是否包含一些文本,但现在使用 Beastalkd 我不知道该怎么做。如果工作已经完成,我计划首先添加验证,然后检查其余部分。但是我怎么能做所有的事情呢?

我正在使用 Codeception,我检查了文档 http://codeception.com/docs/modules/Queue#.VuwE2x_I7eR,但我没有看到任何有助于检查作业状态的方法,然后再考虑,如果作业在其他上下文中(控制台应用程序) ,我怎样才能验证所有的东西?老实说,我认为我能做的一切,只是验证工作是否完成,而不是是否失败。

任何想法、资源或任何东西,我将不胜感激。

有部分同步代码:

    expect('email should be correct', $user->email)->equals('rad8329+8@example.com');
    expect('password should be correct', $user->validatePassword('asdqwe123'))->true();
    expect('email sent', $model->sendEmail())->true();

    $this->specify('message has correct format', function () use ($model) {

        expect('message file exists', file_exists($this->getMessageFile()))->true();

        $message = file_get_contents($this->getMessageFile());
        expect('message "from" is correct', $message)->contains(Yii::$app->params['supportEmail']);
        expect('message "to" is correct', $message)->contains($model->email);

    });

在这种情况下,Beanstalkd 似乎是应用程序不同部分之间的 'seam'。一方将一条消息放入队列,如果您可以验证消息是否正确,并且在队列中,那很好。即使将真实消息放入队列中,对于简单测试来说也可能太多了。

同样,从队列中读取真实消息并让它发送电子邮件可能会太多。来自虚假来源的消息,然后将完整格式的电子邮件发送给虚假的电子邮件发件人 class 足以证明您的代码有效。其余的是其他的,集成,测试,确保消息可以放入队列,从队列中取出,或者可以发送电子邮件。