ich diesen einfachen Service Unit-Test will:Mock Mailer in Symfony Service
/**
* 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;
}
}
Also, mache ich dies derzeit:
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');
}
}
Aber es scheint, wie send
nie, weil ich rief habe diese Rückkehr erhalten:
Erwartung für Methodenname ist gleich, wenn 1 Mal (s) aufgerufen wurde. Es wurde erwartet, dass die Methode 1 Mal aufgerufen wird, tatsächlich 0 Mal aufgerufen wird.
Wenn ich hinzufügen var_dump
, meine Funktion Pass von $this-mailer->send
aber ich weiß nicht, warum die Assertion fehlschlägt.
Was mache ich falsch?
anhängen wahrscheinlich '-> mit ($ this-> etwas())' am Ende? – sakhunzai