2017-02-23 8 views
2

に私はユニットテストに、この単純なサービスたく:だからモックメーラーはsymfonyサービス

/** 
* Class Messager 
* @package AppBundle\Services 
*/ 
class Messager 
{ 

    private $mailer = null; 
    private $templating = null; 

    /** 
    * Messager constructor. 
    * @param \Swift_Mailer $mailer 
    */ 
    public function __construct(\Swift_Mailer $mailer, TwigEngine $templating) 
    { 
     $this->mailer = $mailer; 
     $this->templating = $templating; 
    } 

    /** 
    * Send mail 
    * @param string $email 
    * @param string $message 
    * @return bool 
    */ 
    public function handleMessage(string $email, string $content) : bool 
    { 
     if (!filter_var($email, FILTER_VALIDATE_EMAIL) || strlen($content) < 25) { 
      return false; 
     } 
     $message = \Swift_Message::newInstance() 
     ->setSubject('[DadaPleasure] Incoming message from user') 
     ->setFrom($email) 
     ->setTo('[email protected]') 
     ->setBody($this->templating->render('Emails/contact.html.twig', array('email' => $email, 'message' => $content)), 'text/html'); 
    $this->mailer->send($message); 
    return true; 
    } 
} 

を、私は現在、これをやっている:

class MessagerTest extends TestConfig 
{ 
    public function testSendWrongMessage() 
    { 
     $mailer = $this->getMockBuilder('Swift_Mailer') 
      ->disableOriginalConstructor() 
      ->getMock(); 
     self::$container->set('swiftmailer.mailer.default', $mailer); 

     $this->assertFalse(self::$container->get('app.messager')->handleMessage('hello', 'world')); 
     $mailer->expects($this->never())->method('send'); 
    } 

    public function testSendValidEmail() 
    { 
     $mailer = $this->getMockBuilder('Swift_Mailer') 
      ->disableOriginalConstructor() 
      ->getMock(); 
     $messager = new Messager($mailer, self::$container->get('templating')); 

     $this->assertTrue($messager->handleMessage('[email protected]', 'worldworldworldworldworld')); 
     $mailer->expects($this->once())->method('send'); 
    } 
} 

しかし、私のでsendが呼び出されないように思えます

メソッド名の期待値は、1回呼び出されたときと同じです。 メソッドは1回呼び出され、実際には0回呼び出されると予想されました。

私はvar_dumpを追加した場合、私の関数は$this-mailer->sendで渡したがアサートに失敗した理由を私は知りません。

私は間違っていますか?

+0

おそらく '追加 - >と(何(の$ this - >))'終わり? – sakhunzai

答えて

1
例として、利用前の期待宣言を移動し

$mailer->expects($this->once())->method('send'); 
$messager = new Messager($mailer, self::$container->get('templating')); 

$this->assertTrue($messager->handleMessage('[email protected]', 'worldworldworldworldworld')); 

希望を、このヘルプ

+0

Yesss!それが問題を解決しました。どうもありがとう! – chindit

関連する問題