Я пытаюсь написать какой-то модульный тест, в котором я могу проверить, не должен ли создатель сообщения дважды получать одно и то же электронное письмо.
Я новичок в тестировании (не новый в Symfony.) basi c test, и они работают.
Во-первых, проблема заключается в том, что это метод внутри класса DataPersister внутри платформы Api, который вызывается каждый раз, когда сущность сохраняется и отправляет электронное письмо пользователю.
final class EmailDataPersister
{
public function persist($data, array $context = [])
{
$result = $this->decorated->persist($data, $context);
if (
$data instanceof User&& (
($context['collection_operation_name'] ?? null) === 'post')
) {
$this->sendEmail($data);
}
return $result;
}
private function sendEmail(User $user)
{
$email = (new EmailNotification())
->setTitle('Hello ' . $user->getName())
->setFrom('sender@sent.com')
->setAddress($user->getEmail)
->setBody('This is a new email');
$this->messageBus->dispatch($email);
}
}
Пробовал что-то вроде:
class someModelTest extends TestCase
public function testEmails()
{
$this->satEmail('test@pmg.co');
$this->assertMessageCount(1, 'should have sent one email');
$msg = $this->getMessages()[0];
$this->assertArrayHasKey('test@pmg.co', $msg->getTo());
}
public function satEmail($email)
{
$msg = (new \Swift_Message('Testing..'))
->setSubject('Hello')
->setBody('Hello')
->setFrom('helle@example.com')
->setTo($email);
$this->mailer->send($msg);
}
Думаю, мне нужно добавить ..
$model = $this->getMock('someModel', array('setFrom', 'setTo', 'setSubject', 'send'));
$controller->expects($this->once())
->method('setFrom');
$controller->expects($this->once())
->method('setTo');
$controller->expects($this->once())
->method('setSubject');
$controller->expects($this->once())
->method('send');
$model->sendEmail();
}
I не могу понять, должен ли я вызывать этот метод внутри класса или что я должен определить контроллер модели et c?