When you are working with Laravel Dusk and running the tests on a CI like Travis or Heroku. It gets tricky to get out of the screenshots of failed tests.

Here is how I configured my Laravel Dusk to send email to failed test screenshots.

Create a Mailable Class

php artisan make:mail DuskFailure

Modify the build function of DuskFailure class to gather all the screenshots and send them to the blade file.


   use Illuminate\Support\Facades\File;
   ...
  ..
    public function build()
    {
        $view = $this->view('emails.dusk_failure');
        $files = File::allFiles('tests/Browser/screenshots');
        return $this->view('emails.dusk_failure', [
            'files' => $files
        ]);
    }

Mail Blade File

Create a new blade file named dusk_failure.blade.php inside in the resources > views > emails directory


@forelse ($files as $key => $file)
  <img src="{{ $message->embed($file->getPathname()) }}">
  <p><b>{{$key}}</b> {{$file->getPathname()}}</p>
@empty
  No images found
@endforelse

In this blade template, we loop through the files and output the image along with the image name.

Configure Dusk to send Email on Failure

Finally, in your DuskTestCase class, override captureFailuresFor method to send emails


    protected function captureFailuresFor($browsers) {
        parent::captureFailuresFor($browsers);
   
        Mail::to('youremail@email.com')->send(new DuskFailure());
    }

That's about it. Now whenever you have laravel dusk test failures, You will get an email along with the screenshot of the failed tests.

Comments