使用Laravel 5.5中的视图创建单元测试邮件时,它将无法正常工作

时间:2018-01-02 16:19:09

标签: php laravel unit-testing

我正在使用Mail::fake();开始测试。然后,一个事件触发一个监听器,该监听器发送一封电子邮件:

Mail::send('path_to_a_view', $data, function(Message $message) {
    // set "to" and subject.
});

侦听器实现ShouldQueue接口。

在我的测试中,我尝试使用Mail::assertQueued(...);检查电子邮件是否排队(我为此方法尝试了多个类名,因为我不确定哪种类型会适用于我的情况)。
但由于总是失败,我发现send类中的MailFake方法拒绝使用视图创建的邮件。负责该行为的是following line

为什么它只是回归?如何测试我的邮件是否已排队?

1 个答案:

答案 0 :(得分:1)

你需要为你正在做的事情实施两个单独的测试。

首先测试将测试该事件被触发(handle())。第二个测试将检查如果事件被触发,那么您的侦听器上的Mail::fake()函数会对邮件进行排队(resolve(FQNListener::class)->handle(new resolve(FQNEvent::class)))。

如果您只是想检查邮件,只需省略实施第一次测试。

  

注意:对于第二次测试,您实际上不需要调度事件,只需解析侦听器(Mail::assertQueued(FQNMail::class) )并测试您的邮件是否排队:

php artisan make:mail ...

对于所有这些工作,不要使用回调作为"电子邮件"但是真正的课堂。 (@IBOutlet weak var stack: UIStackView! override func viewDidLoad() { super.viewDidLoad() stack.axis = .vertical stack.distribution = .equalSpacing stack.alignment = .fill stack.spacing = 0 let rndColors = [ UIColor.red, UIColor.blue, UIColor.yellow, UIColor.brown, UIColor.orange, UIColor.green ] for i in 1...24 { let one = UILabel() one.backgroundColor = rndColors[i % rndColors.count] let desiredSize = CGSize(width: stack.frame.width, height: stack.frame.height) let point = CGPoint(x: 0, y: 0) let desiredRect = CGRect(origin: point, size: desiredSize) one.frame = desiredRect let text = "No Ads \(i)" let myAttribute = [ NSAttributedStringKey.font: UIFont(name: "Chalkduster", size: (CGFloat(i + 10)))! ] one.attributedText = NSAttributedString(string: text, attributes: myAttribute) stack.addArrangedSubview(one) } }

  

注意:在这种情况下,如果您只是发送电子邮件,也请考虑删除中间人(事件+侦听器)。