我目前正在将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似乎是应用程序不同部分之间的"接缝"。一方将消息放入队列中,如果您可以验证消息是否正确,并且在队列中,那很好。即使将真实消息放入队列对于简单的测试来说也可能太多了。
同样,从队列中读取真实消息并让它发送电子邮件可能太多了。来自虚假来源的消息,然后将完全格式的电子邮件发送到虚假的电子邮件发件人类足以证明您的代码有效。其余的是其他,集成,测试,确保可以将消息放入,从队列中删除或可以发送电子邮件。