This is a ddev-addon for backstop.js, a visual regression testing tool. Backstop is executed in a docker container based on the official backstopjs docker image.
This addon just provides the basics to run backstopjs. No backstopjs config is included. See below how to generate a config and for links to a more advanced example config.
Install this addon with
ddev add-on get mmunz/ddev-backstopjs
After that you need to restart the ddev project:
ddev restart
Note: If you haven’t downloaded the backstopjs base image before, then it will be downloaded when ddev is restarted. The backstopjs/backstopjs is about 2.6GB, so this may take some time.
By default, the backstop tests are expected in $DDEV_APPDIR/tests/backstop.
Provide your own backstop.js or backstop.json configs there.
Hint: have a look at my example backstopjs-config
Alternatively you can create a simple backstop.json config with:
ddev backstop init
After the config was created it is time to run the tests:
Create reference screenshots:
ddev backstop reference
Create test images and compare to reference screenshots:
ddev backstop test
If your config file is not ‘backstop.json’ you need to use the –config argument, e.g. –config=backstop.js
The backstop commands ‘backstop remote’ and ‘backstop openReport’ do not work in this setup.
But there is a host command that will open the latest test report in your default browser:
ddev backstop-results
Alternatively open the generated HTML-Report with your browser, e.g.:
open tests/backstop/backstop_data/_mytestproject_/html_report/index.html
The backstopjs docker image is extended with some functions using a custom docker build, see Dockerfile and uses a custom entrypoint.
In the Dockerfile the following is added/changed:
The entrypoint is responsible for:
If you want to test hosts not configured in the web container, you need to use external_links in the service containers.
For that add a file docker-compose.external_links.yaml
to your project which should look like this:
services:
backstop:
external_links:
- "ddev-router:myproject.ddev.site"
- "ddev-router:myproject2.ddev.site"
See: ddev FAQ: Can different projects communicate with each other?
Per default the backstop directory containing backstop config etc. is expected in your project directory (besides the .ddev folder) in the directory tests/backstop.
If you want to change that edit the file docker-compose.backstop.yaml and change the line in volumes to the path you want to use, move the files to the new directory and restart ddev.
Make sure to remove the #ddev-generated line from the file to prevent ddev from making changes to it.