Laravel предоставляет набор вспомогательных методов, которые бывают полезны при написании end-to-end тестов. Они позволяют легко нажать на ссылку, заполнить поля формы и отправить ее. Под капотом Laravel использует компонент Symfony BrowserKit для симуляции поведения веб-браузера. Однако, если в вашем приложении используются JavaScript и AJAX для загрузки страницы, BrowserKit не сможет вам помочь.
Laravel Dusk это новый инструмент, который добавлен в Laravel 5.4 для решения этой проблемы.
Laravel Dusk это инструмент для end-to-end тестирования ваших приложений, в которых используется JavaScript. Его целью является предоставление правильного способа тестирования различных интерактивных функций, таких как клик по кнопке или ссылке, заполнение формы и даже Drag and Drop!
Laravel Dusk использует ChromeDriver и Php-webdriver для выполнения end-to-end тестов. Он также может работать с любым Selenium-браузером. но по умолчанию он поставляется с ChromeDriver, что позволит вам избежать установки JDK или Selenium. Это делает Dusk очень простым в использовании. Вам не нужно проходить через трудоемкий процесс установки Selenium и постоянно запускать сервер. Плюс к этому, Тэйлор Отвел отметил, что тесты в Dusk выполняются быстрее, чем в Selenium.
Dusk позволяет подождать, пока какое-нибудь условие станет истинным или CSS-селектор станет доступен. Все это позволяет лучше тестировать приложения с использованием JavaScript.
Также Dusk автоматически сохраняет скриншоты проваленных тестов! Вы можете увидеть, как выглядела страница и что пошло не так.
Еще одна приятная возможность — хелперы типа loginAs, который позволяет вам авторизоваться и получить сущность пользователя. При этом вы можете открыть любую страницу, где требуется авторизация без необходимости каждый раз входить в аккаунт.
Dusk позволяет открыть несколько окон браузера для одного теста. Это упрощает тестирование приложений, в котором используются сокеты: вы можете выполнять какие-либо действия в одном окне и получить результат в другом.
Отвел также предоставил некоторую информацию о среде тестирования в Dusk. В корне вашего приложения содержится файл .env.dusk, в котором хранятся настройки среды тестирования. Для запуска Dusk-тестов вы не используете PHPUnit напрямую. Вместо этого вы вызывает artisan-команду Dusk, который делает резервную копию вашего файла .env, заменяет его файлом .env.dusk на время выполнения тестов, а после завершения восстанавливает ваш .env файл.
Заметьте, что ваши тесты, написанные с использованием BrowserKit не пропадут при обновлении с Laravel 5.3 до 5.4. Для обратной совместимости есть отдельный пакет — Laravel BrowserKit Testing.
Комментарии (9)
jigpuzzled
29.12.2016 11:04+2Тоесть это просто Selenium? Тогда уж лучше использовать Codeception который уже давно стабилен и прекрасно работает.
saggid
31.12.2016 04:58+1Вроде как не просто селениум, читайте статью внимательнее:
Он также может работать с любым Selenium-браузером. но по умолчанию он поставляется с ChromeDriver, что позволит вам избежать установки JDK или Selenium. Это делает Dusk очень простым в использовании.
jigpuzzled
31.12.2016 14:47https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver
С ним так же может работать и Codeception. Фактически этот Даск это просто обертка над методами WireProtocol, так же как и сотня таких же библиотек. Ничего нового тут нет, просто красивый брендинг.
saggid
Очень очень интересно и вкусно) Осталось дождаться следующего LTS, как говорится.
Сторонники RoR, есть ли у вас что-то подобное в вашей экосистеме?
Fedcomp
capybara например, но она судя по тому что тут написано мощнее.
Впрочем тестов с нескольким окнами там судя по всему нет.
printercu
2 минуты гугления
capybara websocket
: https://github.com/tristandunn/cucumber-websocket-example/blob/master/features/user_create.featureOnYourLips
В PHP уже есть 3 универсальных аналогичных решения.
У сторонников Rails тоже есть Capybara и selenium-cucumber.