Update Dusk Documentation
Added new option on how to setup and run Dusk tests without Selenium.
This commit is contained in:
parent
a2edf57e3b
commit
98b2b2e47b
@ -565,6 +565,187 @@ Assuming that you are in laradock folder, type:
|
|||||||
<a name="Laravel-Dusk"></a>
|
<a name="Laravel-Dusk"></a>
|
||||||
# Running Laravel Dusk Tests
|
# Running Laravel Dusk Tests
|
||||||
|
|
||||||
|
- [Option 1: Without Selenium](#option1-dusk)
|
||||||
|
- [Option 2: With Selenium](#option2-dusk)
|
||||||
|
|
||||||
|
<a name="option1-dusk"></a>
|
||||||
|
## Option 1: Without Selenium
|
||||||
|
|
||||||
|
- [Intro](#option1-dusk-intro)
|
||||||
|
- [Workspace Setup](#option1-workspace-setup)
|
||||||
|
- [Application Setup](#option1-application-setup)
|
||||||
|
- [Choose Chrome Driver Version (Optional)](#option1-choose-chrome-driver-version)
|
||||||
|
- [Run Dusk Tests](#option1-run-dusk-tests)
|
||||||
|
|
||||||
|
<a name="option1-dusk-intro"></a>
|
||||||
|
### Intro
|
||||||
|
|
||||||
|
This is a guide to run Dusk tests in your `workspace` container with headless
|
||||||
|
google-chrome and chromedriver. It has been tested with Laravel 5.4 and 5.5.
|
||||||
|
|
||||||
|
<a name="option1-workspace-setup"></a>
|
||||||
|
### Workspace Setup
|
||||||
|
|
||||||
|
Update your .env with following entries:
|
||||||
|
|
||||||
|
```
|
||||||
|
...
|
||||||
|
# Install Laravel installer bin to setup demo app
|
||||||
|
WORKSPACE_INSTALL_LARAVEL_INSTALLER=true
|
||||||
|
...
|
||||||
|
# Install all the necessary dependencies for running Dusk tests
|
||||||
|
WORKSPACE_INSTALL_DUSK_DEPS=true
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
Then run below to build your workspace.
|
||||||
|
|
||||||
|
```
|
||||||
|
docker-compose build workspace
|
||||||
|
```
|
||||||
|
|
||||||
|
<a name="option1-application-setup"></a>
|
||||||
|
### Application Setup
|
||||||
|
|
||||||
|
Run a `workspace` container and you will be inside the container at `/var/www` directory.
|
||||||
|
|
||||||
|
```
|
||||||
|
docker-compose run workspace bash
|
||||||
|
|
||||||
|
/var/www#> _
|
||||||
|
```
|
||||||
|
|
||||||
|
Create new Laravel application named `dusk-test` and install Laravel Dusk package.
|
||||||
|
|
||||||
|
```
|
||||||
|
/var/www> laravel new dusk-test
|
||||||
|
/var/www> cd dusk-test
|
||||||
|
/var/www/dusk-test> composer require --dev laravel/dusk
|
||||||
|
/var/www/dusk-test> php artisan dusk:install
|
||||||
|
```
|
||||||
|
|
||||||
|
Create `.env.dusk.local` by copying from `.env` file.
|
||||||
|
|
||||||
|
```
|
||||||
|
/var/www/dusk-test> cp .env .env.dusk.local
|
||||||
|
```
|
||||||
|
|
||||||
|
Update the `APP_URL` entry in `.env.dusk.local` to local Laravel server.
|
||||||
|
|
||||||
|
```
|
||||||
|
APP_URL=http://localhost:8000
|
||||||
|
```
|
||||||
|
|
||||||
|
You will need to run chromedriver with `headless` and `no-sandbox` flag. In Laravel Dusk 2.x it is
|
||||||
|
already set `headless` so you just need to add `no-sandbox` flag. If you on previous version 1.x,
|
||||||
|
you will need to update your `DustTestCase#driver` as shown below.
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
<?php
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
abstract class DuskTestCase extends BaseTestCase
|
||||||
|
{
|
||||||
|
...
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update chrome driver with below flags
|
||||||
|
*/
|
||||||
|
protected function driver()
|
||||||
|
{
|
||||||
|
$options = (new ChromeOptions)->addArguments([
|
||||||
|
'--disable-gpu',
|
||||||
|
'--headless',
|
||||||
|
'--no-sandbox'
|
||||||
|
]);
|
||||||
|
|
||||||
|
return RemoteWebDriver::create(
|
||||||
|
'http://localhost:9515', DesiredCapabilities::chrome()->setCapability(
|
||||||
|
ChromeOptions::CAPABILITY, $options
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
<a name="option1-choose-chrome-driver-version"></a>
|
||||||
|
### Choose Chrome Driver Version (Optional)
|
||||||
|
|
||||||
|
You could choose to use either:
|
||||||
|
|
||||||
|
1. Chrome Driver shipped with Laravel Dusk. (Default)
|
||||||
|
2. Chrome Driver installed in `workspace` container. (Required tweak on DuskTestCase class)
|
||||||
|
|
||||||
|
For Laravel 2.x, you need to update `DuskTestCase#prepare` method if you wish to go with option #2.
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
<?php
|
||||||
|
|
||||||
|
...
|
||||||
|
abstract class DuskTestCase extends BaseTestCase
|
||||||
|
{
|
||||||
|
...
|
||||||
|
public static function prepare()
|
||||||
|
{
|
||||||
|
// Only add this line if you wish to use chrome driver installed in workspace container.
|
||||||
|
// You might want to read the file path from env file.
|
||||||
|
static::useChromedriver('/usr/local/bin/chromedriver');
|
||||||
|
|
||||||
|
static::startChromeDriver();
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
For Laravel 1.x, you need to add `DuskTestCase#buildChromeProcess` method if you wish to go with option #2.
|
||||||
|
|
||||||
|
```
|
||||||
|
<?php
|
||||||
|
|
||||||
|
...
|
||||||
|
use Symfony\Component\Process\ProcessBuilder;
|
||||||
|
|
||||||
|
abstract class DuskTestCase extends BaseTestCase
|
||||||
|
{
|
||||||
|
...
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Only add this method if you wish to use chrome driver installed in workspace container
|
||||||
|
*/
|
||||||
|
protected static function buildChromeProcess()
|
||||||
|
{
|
||||||
|
return (new ProcessBuilder())
|
||||||
|
->setPrefix('chromedriver')
|
||||||
|
->getProcess()
|
||||||
|
->setEnv(static::chromeEnvironment());
|
||||||
|
}
|
||||||
|
|
||||||
|
...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
<a name="option1-run-dusk-tests"></a>
|
||||||
|
### Run Dusk Tests
|
||||||
|
|
||||||
|
Run local server in `workspace` container and run Dusk tests.
|
||||||
|
|
||||||
|
```
|
||||||
|
# alias to run Laravel server in the background (php artisan serve --quiet &)
|
||||||
|
/var/www/dusk-test> serve
|
||||||
|
# alias to run Dusk tests (php artisan dusk)
|
||||||
|
/var/www/dusk-test> dusk
|
||||||
|
|
||||||
|
PHPUnit 6.4.0 by Sebastian Bergmann and contributors.
|
||||||
|
|
||||||
|
. 1 / 1 (100%)
|
||||||
|
|
||||||
|
Time: 837 ms, Memory: 6.00MB
|
||||||
|
```
|
||||||
|
|
||||||
|
<a name="option2-dusk"></a>
|
||||||
|
## Option 2: With Selenium
|
||||||
|
|
||||||
- [Intro](#dusk-intro)
|
- [Intro](#dusk-intro)
|
||||||
- [DNS Setup](#dns-setup)
|
- [DNS Setup](#dns-setup)
|
||||||
- [Docker Compose Setup](#docker-compose)
|
- [Docker Compose Setup](#docker-compose)
|
||||||
@ -572,7 +753,7 @@ Assuming that you are in laradock folder, type:
|
|||||||
- [Running Laravel Dusk Tests](#running-tests)
|
- [Running Laravel Dusk Tests](#running-tests)
|
||||||
|
|
||||||
<a name="dusk-intro"></a>
|
<a name="dusk-intro"></a>
|
||||||
## Intro
|
### Intro
|
||||||
Setting up Laravel Dusk tests to run with Laradock appears be something that
|
Setting up Laravel Dusk tests to run with Laradock appears be something that
|
||||||
eludes most Laradock users. This guide is designed to show you how to wire them
|
eludes most Laradock users. This guide is designed to show you how to wire them
|
||||||
up to work together. This guide is written with macOS and Linux in mind. As such,
|
up to work together. This guide is written with macOS and Linux in mind. As such,
|
||||||
@ -583,7 +764,7 @@ This guide assumes you know how to use a DNS forwarder such as `dnsmasq` or are
|
|||||||
with editing the `/etc/hosts` file for one-off DNS changes.
|
with editing the `/etc/hosts` file for one-off DNS changes.
|
||||||
|
|
||||||
<a name="dns-setup"></a>
|
<a name="dns-setup"></a>
|
||||||
## DNS Setup
|
### DNS Setup
|
||||||
According to RFC-2606, only four TLDs are reserved for local testing[^1]:
|
According to RFC-2606, only four TLDs are reserved for local testing[^1]:
|
||||||
|
|
||||||
- `.test`
|
- `.test`
|
||||||
@ -617,7 +798,7 @@ This will ensure that when navigating to `myapp.test`, it will route the
|
|||||||
request to `127.0.0.1` which will be handled by Nginx in Laradock.
|
request to `127.0.0.1` which will be handled by Nginx in Laradock.
|
||||||
|
|
||||||
<a name="docker-compose"></a>
|
<a name="docker-compose"></a>
|
||||||
## Docker Compose setup
|
### Docker Compose setup
|
||||||
In order to make the Selenium container talk to the Nginx container appropriately,
|
In order to make the Selenium container talk to the Nginx container appropriately,
|
||||||
the `docker-compose.yml` needs to be edited to accommodate this. Make the following
|
the `docker-compose.yml` needs to be edited to accommodate this. Make the following
|
||||||
changes:
|
changes:
|
||||||
@ -640,7 +821,7 @@ necessary for running Dusk tests. These changes also link the `nginx` environmen
|
|||||||
variable to the domain you wired up in your hosts file.
|
variable to the domain you wired up in your hosts file.
|
||||||
|
|
||||||
<a name="laravel-dusk-setup"></a>
|
<a name="laravel-dusk-setup"></a>
|
||||||
## Laravel Dusk Setup
|
### Laravel Dusk Setup
|
||||||
|
|
||||||
In order to make Laravel Dusk make the proper request to the Selenium container,
|
In order to make Laravel Dusk make the proper request to the Selenium container,
|
||||||
you have to edit the `DuskTestCase.php` file that's provided on the initial
|
you have to edit the `DuskTestCase.php` file that's provided on the initial
|
||||||
@ -650,13 +831,13 @@ Remote Web Driver attempts to use to set up the Selenium session.
|
|||||||
One recommendation for this is to add a separate config option in your `.env.dusk.local`
|
One recommendation for this is to add a separate config option in your `.env.dusk.local`
|
||||||
so it's still possible to run your Dusk tests locally should you want to.
|
so it's still possible to run your Dusk tests locally should you want to.
|
||||||
|
|
||||||
### .env.dusk.local
|
#### .env.dusk.local
|
||||||
```
|
```
|
||||||
...
|
...
|
||||||
USE_SELENIUM=true
|
USE_SELENIUM=true
|
||||||
```
|
```
|
||||||
|
|
||||||
### DuskTestCase.php
|
#### DuskTestCase.php
|
||||||
```php
|
```php
|
||||||
abstract class DuskTestCase extends BaseTestCase
|
abstract class DuskTestCase extends BaseTestCase
|
||||||
{
|
{
|
||||||
@ -677,7 +858,7 @@ abstract class DuskTestCase extends BaseTestCase
|
|||||||
```
|
```
|
||||||
|
|
||||||
<a name="running-tests"></a>
|
<a name="running-tests"></a>
|
||||||
## Running Laravel Dusk Tests
|
### Running Laravel Dusk Tests
|
||||||
|
|
||||||
Now that you have everything set up, to run your Dusk tests, you have to SSH
|
Now that you have everything set up, to run your Dusk tests, you have to SSH
|
||||||
into the workspace container as you normally would:
|
into the workspace container as you normally would:
|
||||||
|
Loading…
Reference in New Issue
Block a user