2016-03-18 47 views
0

我目前在我的Yii2項目中引入了Banstalkd,但是我在測試中遇到了一些問題。一個例子是在單元測試同步之前測試發送的郵件,驗證郵件是否已發送,以及正確的電子郵件格式,如果包含一些文本,但現在與Beastalkd我不知道wtha做。如果工作完成,我打算先添加驗證,然後檢查其餘部分。但我怎麼能做所有的東西?在代碼中測試Beanstalkd作業

我使用的是Codeception,我檢查了文檔http://codeception.com/docs/modules/Queue#.VuwE2x_I7eR,但我沒有看到任何幫助檢查作業狀態的方法,第二個想法是,如果作業在其他上下文中(控制檯應用程序),我如何驗證所有的事情?我誠實地認爲,我所能做的一切只是驗證工作是否完成,但如果失敗則不能。

任何想法,資源或任何,我會很感激。

有的syncronous碼的一部分:

expect('email should be correct', $user->email)->equals('[email protected]'); 
    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); 

    }); 

回答

0

在這種情況下Beanstalkd似乎是該應用程序的不同部分之間的「接縫」。一方將消息放入隊列中,如果您可以驗證消息是否正確,並在隊列中,那就好了。即使有一個真正的消息放入隊列中,對於一個簡單的測試來說可能太多了。

同樣,從隊列中讀取真正的消息併發送電子郵件可能太多了。從假源發出的消息,然後將完整形式的電子郵件發送給假電子郵件發件人類足以證明您的代碼正常工作。其餘的是其他的集成測試,確保消息可以放入隊列中,也可以發送電子郵件。