2016-12-06 26 views
0

對於我們的項目,我們使用用於電子郵件的定製包。這個軟件包包含結構是這樣的:Phpunit郵件測試。找不到有效的方法

class Mail 
{ 
    public function send($data, $view) 
    { 
     //some logic here 

     return with(new Mailgun($this->key))->sendMessage($data); 
    } 
} 

class Message extends Mail 
{ 

    public function passwordReset($data, $view) 
    { 
     return $this->send($data, 'viewFile1'); 
    } 

    public function activate() 
    { 
     return $this->send($data, 'viewFile2'); 
    } 

} 

使用看起來像這樣我的測試之前:

public function testPasswordReset() 
{ 
    $data = new User(5); 
    $rv = with(new Message)->activate($data, 'view'); 

    $this->assertEqual($rv, 200); 
} 

但我們既然決定電子郵件不應該送我失去了任何實際的數據。

我看過幾個教程這些服務怎麼樣MailCatcher和我背後的想法,但:

如何測試我的包背後的邏輯,當結果始終是HTTP狀態?

如何測試包中的非smtp郵件服務?

請讓我知道如果你需要任何額外的信息

回答

1

我發現mailcatcher是最好的解決方案。您只能通過編輯phpunit.xml來爲測試目的設置自定義env變量。您應該看到以下幾行。

<php> 
     <env name="APP_ENV" value="testing"/> 
     <env name="CACHE_DRIVER" value="array"/> 
     <env name="SESSION_DRIVER" value="array"/> 
     <env name="QUEUE_DRIVER" value="sync"/> 
    </php> 

您應該可以爲您的郵件收集器配置或您想要測試的任何其他配置添加任何其他env變量。