我正在使用Mail::fake();
开始测试。然后,一个事件触发一个监听器,该监听器发送一封电子邮件:
Mail::send('path_to_a_view', $data, function(Message $message) {
// set "to" and subject.
});
侦听器实现ShouldQueue
接口。
在我的测试中,我尝试使用Mail::assertQueued(...);
检查电子邮件是否排队(我为此方法尝试了多个类名,因为我不确定哪种类型会适用于我的情况)。
但由于总是失败,我发现send
类中的MailFake
方法拒绝使用视图创建的邮件。负责该行为的是following line。
为什么它只是回归?如何测试我的邮件是否已排队?
答案 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)
}
}
)
注意:在这种情况下,如果您只是发送电子邮件,也请考虑删除中间人(事件+侦听器)。