Laravel Dusk Is Coming to Laravel 5.4

When you write end-to-end tests, Laravel provides a set of useful helper methods which make it easy to click a link, fill an input field, or submit a form. Under the hood, Laravel uses the Symfony BrowserKit component to simulate the behavior of the web browser. However, if your app uses JavaScript and AJAX to load the page, BrowserKit will not work for you.

Laravel Dusk is a new tool that will be introduced in Laravel 5.4 to solve this problem.

Dusk is an end-to-end browser testing tool for JavaScript enabled applications. It aims to provide the right way to do page interaction tests, so you can use Dusk for things like click buttons/links, fill out forms, and even drag and drop!

Dusk is utilizing ChromeDriver and Facebook Php-webdriver for doing end-to-end tests. It can work with any Selenium browser, but it comes with ChromeDriver by default which will save you from installing JDK or Selenium. It makes Dusk very easy to use without the need to go through the tough process of setting up Selenium and starting the server every time. Furthermore, Taylor Otwell mentions Dusk tests are running faster than Selenium.

Dusk will be more natural than BrowserKit; you don’t have to wait on something to finish or use sleeping and pausing while waiting for things to appear. Instead, Dusk allows you to wait for some condition to be true in your JavaScript or wait for CSS selectors to be available to have a better way to test JavaScript enabled applications.

Also, Dusk will save screenshots of your failed tests automatically! You can see what the page looked like and what went wrong.

Another nice feature is that it will provide handy helper methods like loginAs, which allows you to give it a user instance. It will log the user in, and the test will go straight to any authenticated URL directly without going through the login screen every time.

Dusk will allow you to open multiple browser windows per test which will make it easy to test apps which have socket integration. You can open two windows and interact with the first and see the result in the second.

Otwell has also provided some information about the Dusk testing environment; your app root will contain a .env.dusk file to define your testing environment. To run your Dusk test, you will not use PHPUnit directly. Instead, you will call a Dusk artisan command which will proxy down to PHPUnit and backup your .env file. Then, it will move the .env.dusk file to be the environment being used for your Dusk test. When finished, it will restore your real .env file back to its place.

Note that you can use the old BrowserKit testing if you have an app using Laravel 5.3 and want to upgrade to 5.4 without losing your current tests. The Laravel BrowserKit Testing package will provide the Laravel 5.3 style “BrowserKit” testing on Laravel 5.4.