Case 1: Mail send without Mailable class
Sometime we don’t use mailable class, instead we want to send directly with send
method.
1 2 3 4 5 6 7 8 9 10 11 12
| <?php function sendMailOrderShipped($order) { $subject = 'Order ' . $order->id . ' is shipped'; $recipient = $order->user->email; \Illuminate\Support\Facades\Mail::send('emails.order-shipped', compact('order'), function ($message) use ($subject, $recipient) { $message ->to($recipient) ->subject($subject) ; }); }
|
Unit test case
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| <?php
public function user_should_receive_order_shipped_email() { Mail::fake();
$user = User::factory()->create(); $deal = Order::factory() ->for($user) ->create();
$recipient = $user->email; $subject = 'Order ' . $order->id . ' is shipped';
Mail::shouldReceive('send') ->with( 'emails.order-shipped', Mockery::type('array'), Mockery::on(function (\Closure $closure) use ($subject, $recipient) { $mock = Mockery::mock(\Illuminate\Mail\Message::class); $mock->shouldReceive('to')->once()->with($recipient)->andReturn($mock); $mock->shouldReceive('subject')->once()->with($subject);
$closure($mock);
return true; }), ) ->times(1) ;
sendMailOrderShipped($order); }
|