By: Shankar
February 23 2019

Demystifying BackstopJS

A scientist can be rewarded a Nobel prize for some amazing scientific breakthrough made in his or her research. Most often than not, the leading scientist is backstopped in the research by a team of hugely talented assistants.

Lemur sitting near a wood


Talking about backstopping, you do need something as a backstop even in the digital landscape. When you make an alteration to your website, you have to be sure if it is devoid of unintended side effects. This is where BackstopJS comes into light. As an intuitive tool, it enables swift configuration and helps you get up and rolling quickly.  Before we look at how it can be leveraged with Drupal, let’s dive deeper into visual regression testing and BackstopJS.

Traversing visual regression testing and BackstopJS

Visual regression testing emphasises on identifying visual alterations between iterations or version of a site. In this, reference images are created for every component as they are created which enables a comparison over time for monitoring alterations. Developers can run this test on his or her local development environment after the alterations are performed to make sure that no regressions issues transpire because of the changes.

Visual regression testing emphasises on identifying visual alterations between iterations or version of a site.

Visual regression testing is hugely beneficial in enabling the developers to get a test coverage that is more than what they could do manually thereby ensuring that alterations do not cause regression impact on other components. It has the provision for enhanced detail comparison than what you would get while reviewing the site manually. Even without a full understanding of the project, developers know what the website should look like before the alterations.

Logo of BackstopJS with graphical image of lemur and backstopjs written below


BackstopJS, an open source project, is a great tool for performing visual regression testing. It is leveraged for running visual tests with the help of headless browsers to capture screenshots. It was created by Garris Shipon and was originally ran with the help of PhantomJS or SlimerJS headless browser libraries. It supports screen rendering with Chrome-headless and you can add your own interactions using Puppeteer and ChromyJS scripting.

BackstopJS is leveraged for running visual tests with the help of headless browsers to capture screenshots

It offers an excellent comparison tool for identifying and highlighting differences and lets you set up several breakpoints for testing responsive sites. Moreover, it utilises simple CSS selectors for identifying what to capture. It provides in-browser reporting user interface like a customisable layout, scenario display filtering, etc.  Furthermore, it comes with integrated Docker rendering and works superbly with continuous integration and source control. Also, it gives you CLI and JUnit reports.

Workflow and installation

It’s pretty easy to install and configure BackstopJS which involves:

Installation (global): npm install -g backstopjs
Installation (local): npm install --save-dev backstopjs
Configuration: backstop init (creates backstop.json template)

Following is the workflow of BackstopJS:

  • backstop init: A new BackstopJS instance is set up by specifying URLs, cookies, screen sizes, DOM selectors, interactions among others
  • backstop test: By creating a set of test screengrabs and comparing them with your reference screengrabs, you can check the alterations that show up in a visual report.
  • backstop approve: If all looks fine after the test, you can approve it

BackstopJS with Drupal

A Drupal Community event in 2018 talked about a Drupal 8 module called Backstop Generator for creating backstop.json configuration files on the basis of site’s unique content.


This Drupal 8 module exposes an administrative configuration form to create a BackstopJS visual testing profile on the basis of Drupal website’s content. It assists you in creating backstop scenarios from Drupal pages and defining random pages for including as scenarios. You can toggle on and off viewport sizes. It results in a backstop.json file that requires you to place that into a backstop directory and the existing backstop.json file is replaced. It requires the services of Serialisation, HAL and REST modules. It is worth noting that this module is not covered by Drupal’s security advisory policy.

Backstop Generator can do a lot more. You can contribute towards building more interesting features and join the issue queue on Drupal.org to submit a patch or report a bug.

Conclusion

Deploying frontend alterations can be troublesome. Visual regression testing software like BackstopJS ensures that our changes are accurate and contained and can be great for Drupal sites.

We have been offering a suite of services to help digital firms fulfil their dreams of digital transformation.

Contact us at [email protected] and let us know how you want us to be part of your digital transformation plans.