<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Chanchal K Maurya</title>
    <description>The latest articles on DEV Community by Chanchal K Maurya (@chanchalkmaurya).</description>
    <link>https://dev.to/chanchalkmaurya</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F504291%2Faef03bc7-d284-4092-8cf8-63bd22d3d8f5.jpg</url>
      <title>DEV Community: Chanchal K Maurya</title>
      <link>https://dev.to/chanchalkmaurya</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/chanchalkmaurya"/>
    <language>en</language>
    <item>
      <title>Want to grow with Automation? You can try this new cool feature of NodeJS — Visual Regression Testing (BackstopJS)</title>
      <dc:creator>Chanchal K Maurya</dc:creator>
      <pubDate>Mon, 01 May 2023 06:51:57 +0000</pubDate>
      <link>https://dev.to/chanchalkmaurya/want-to-grow-with-automation-you-can-try-this-new-cool-feature-of-nodejs-visual-regression-testing-backstopjs-1hd1</link>
      <guid>https://dev.to/chanchalkmaurya/want-to-grow-with-automation-you-can-try-this-new-cool-feature-of-nodejs-visual-regression-testing-backstopjs-1hd1</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0hQwW1z3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r8gfv4wyilq45px4uqu0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0hQwW1z3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r8gfv4wyilq45px4uqu0.png" alt="Image description" width="800" height="501"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Are you a front-end developer or software test engineer and facing issues related to changes in UI on your web pages after the release of the product?&lt;/p&gt;

&lt;p&gt;If yes, here is a simple solution to it. NodeJS provides a package(BackstopJS) that is useful to test the UI changes on Webpage which can be used to keep an eye on such kinds of UI changes.&lt;/p&gt;

&lt;p&gt;Hi everyone, I’m Chanchal Kumar Maurya &amp;amp; I’m a computer Science Graduate. we are going to cover almost everything that is used in the BackstopJS framework provided by NodeJS.&lt;/p&gt;

&lt;h1&gt;
  
  
  Backstop workflow
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;backstop init&lt;/code&gt;: Set up a new BackstopJS instance -- specify URLs, cookies, screen sizes, DOM selectors, interactions, etc.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;backstop reference&lt;/code&gt;:BackstopJS creates a set of screenshots that are used for comparison when test screenshots are captured.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;backstop test&lt;/code&gt;: BackstopJS creates a set of test screenshots and compares them with your reference screenshots. Any changes show up in a visual report. (Run this after making CSS changes as many times as needed.)&lt;/p&gt;

&lt;p&gt;&lt;code&gt;backstop approve&lt;/code&gt;: If the test you ran looks good, then go ahead and approve it. Approving changes will update your reference files with the results from your last test. Future tests are compared against your most recent approved test screenshots.&lt;/p&gt;

&lt;h1&gt;
  
  
  Getting started with BackstopJS
&lt;/h1&gt;

&lt;p&gt;Setting up Backstop Environments&lt;/p&gt;

&lt;h2&gt;
  
  
  1. NodeJS installation
&lt;/h2&gt;

&lt;p&gt;First of all, You have to install NodeJS in your system. Refer to the official site of NodeJS for installation. Download nodejs. once nodejs is installed, hit the command on your terminal (for Windows — use cmd/Windows Powershell, for Linux/macOS use terminal)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--f7PwHsXv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2vpry1svdff1cvhabqh6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--f7PwHsXv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2vpry1svdff1cvhabqh6.png" alt="Image description" width="800" height="123"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. BackstopJS installation
&lt;/h2&gt;

&lt;p&gt;Global installation (recommended)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ npm install -g backstopjs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Local installation&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ npm install backstopjs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;BackstopJS will run as a totally stand-alone app — but installing locally allows you to do this…&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const backstop = require('backstopjs');
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Initialize Your Project
&lt;/h1&gt;

&lt;p&gt;If you don’t already have BackstopJS set up in your system… BackstopJS can create a default configuration file and project scaffolding in your current working directory. Please note: this will overwrite any existing files!&lt;/p&gt;

&lt;p&gt;To avoid any confusion, I suggest creating a new directory, moving to the directory, and hitting the below command on the terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ backstop init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you execute the above command, backstop creates a default configuration file and some other files in a structured way in your system which looks like the below image:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zfi2dsNt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5jnjw1o9f5rvwv4d3dau.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zfi2dsNt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5jnjw1o9f5rvwv4d3dau.png" alt="Image description" width="800" height="502"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The most important file here is the backstop.json configuration file. By default, BackstopJS places backstop.json at the root of your project. And also by default, BackstopJS looks for this file when invoked.&lt;/p&gt;

&lt;h1&gt;
  
  
  Working with Configuration File
&lt;/h1&gt;

&lt;p&gt;backstop.json file contains multiple fields, some are mandatory and some are used according to the need of testing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6VCMbkRZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wyaf1t6z1gwb5o3rp733.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6VCMbkRZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wyaf1t6z1gwb5o3rp733.png" alt="Image description" width="800" height="579"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let us start with each item in the backstop.json file to understand it in detail:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. id
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KnYWI6dR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0zb2epjc0qr1mrvcp9ln.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KnYWI6dR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0zb2epjc0qr1mrvcp9ln.png" alt="Image description" width="724" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Used for screenshot naming. Set this property when sharing reference files with teammates — otherwise, omit and BackstopJS will auto-generate one for you to avoid naming collisions with BackstopJS resources.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. viewports
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hLnwL2cR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jlv9x787xgmrlse0br1y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hLnwL2cR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jlv9x787xgmrlse0br1y.png" alt="Image description" width="396" height="390"&gt;&lt;/a&gt;&lt;br&gt;
An array of screen size objects your DOM will be tested against. Add as many as you like — but add at least one. By default, it comes with two viewports: one for desktop and another one for mobile.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Scenarios
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4MarXP_K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cwln70c152ovn65r690z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4MarXP_K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cwln70c152ovn65r690z.png" alt="Image description" width="800" height="590"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is the code place where actual tests are written. there are two mandatory fields in it that are:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;scenarios[n].label&lt;/code&gt; – Required. Also used for screenshot naming.&lt;br&gt;
&lt;code&gt;scenarios[n].url&lt;/code&gt; – Required. Tells BackstopJS what endpoint/document you want to test. This can be an absolute URL or local to your current working directory.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: no other SCENARIO properties are required. Other properties can just be added as necessary.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here are some other sub-properties which are used while taking snapshots:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;referenceUrl&lt;/code&gt;: Specify a different state or environment when creating reference. (should be&lt;/p&gt;

&lt;p&gt;&lt;code&gt;readyEvent&lt;/code&gt;&lt;br&gt;
: Wait until this string has been logged to the console.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;readySelector&lt;/code&gt;: wait for this css selector to exists before contuning further.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;delay&lt;/code&gt;: Wait for x milliseconds.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;hideSelectors&lt;/code&gt;: It is an array of selectors set to visibility: hidden while taking snapshot.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;removeSelectors&lt;/code&gt;: It is an array of selectors set to display: none while taking snapshot. (hideSelectors hides that selector which means blank will be visible in that are, but removeSelectors removes that section and shift the below content to above)&lt;/p&gt;

&lt;p&gt;&lt;code&gt;hoverSelector&lt;/code&gt;: Move the pointer over the specified DOM element prior to screen shot.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;clickSelector&lt;/code&gt;: Click the specified DOM element prior to screen shot.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;postInteractionWait&lt;/code&gt;: Wait for a selector after interacting with hoverSelector or clickSelector (optionally accepts wait time in ms. Ideal for use with a click or hover element transition. available with default onReadyScript)&lt;/p&gt;

&lt;p&gt;&lt;code&gt;selectors&lt;/code&gt;: it the an array of css selectors. If It specified only these selectors are captured, if not specified (default property) the whole webpage is captured.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;misMatchThreshold&lt;/code&gt;: Percentage of different pixels allowed to pass test&lt;/p&gt;

&lt;p&gt;&lt;code&gt;requireSameDimension&lt;/code&gt;: If set to true — any change in selector size will trigger a test failure.&lt;/p&gt;
&lt;h2&gt;
  
  
  Creating Reference Images
&lt;/h2&gt;

&lt;p&gt;backstop.json file content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "id": "LinkedIn Profiles",
  "viewports": [
    {
      "label": "phone",
      "width": 320,
      "height": 480
    },
    {
      "label": "tablet",
      "width": 1024,
      "height": 768
    }
  ],
  "onBeforeScript": "puppet/onBefore.js",
  "onReadyScript": "puppet/onReady.js",
  "scenarios": [
    {
      "label": "Chanchal",
      "cookiePath": "backstop_data/engine_scripts/cookies.json",
      "url": "https://www.linkedin.com/in/elvissh07"
    }
  ],
  "paths": {
    "bitmaps_reference": "backstop_data/bitmaps_reference",
    "bitmaps_test": "backstop_data/bitmaps_test",
    "engine_scripts": "backstop_data/engine_scripts",
    "html_report": "backstop_data/html_report",
    "ci_report": "backstop_data/ci_report"
  },
  "report": ["browser"],
  "engine": "puppeteer",
  "engineOptions": {
    "args": ["--no-sandbox"]
  },
  "asyncCaptureLimit": 5,
  "asyncCompareLimit": 50,
  "debug": false,
  "debugWindow": false
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to create a reference image, move to the project directory and hit the below command in the terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ backstop reference
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It will create new reference images for the specified URLs and deletes the old ones if any exist.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qKc9F_cj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ru6ans3ge33t5slat36f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qKc9F_cj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ru6ans3ge33t5slat36f.png" alt="Image description" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note: Images are stored where the path is mentioned in the backstop.json file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cPhdF960--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/77n9j44og9yyxvscl788.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cPhdF960--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/77n9j44og9yyxvscl788.png" alt="Image description" width="719" height="202"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;names of reference images look like below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jzh73PIn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nm3akcsb3w770s2uvzh1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jzh73PIn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nm3akcsb3w770s2uvzh1.png" alt="Image description" width="661" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;name format of images : &lt;code&gt;(id_scenario[n].label_0_document_0_viewports)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;for the above scenario, the reference image looks something like this&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Z8bzJ1GZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4gwtp265lxlypgsgys86.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Z8bzJ1GZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4gwtp265lxlypgsgys86.png" alt="Image description" width="800" height="611"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating and Comparing Test images with Reference Images
&lt;/h2&gt;

&lt;p&gt;to see the difference with reference let's make some changes. we are going to use hideSelectors to remove the Google search from the image.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_QJmi0PA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/enejaesqmt0qqxv3r8q6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_QJmi0PA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/enejaesqmt0qqxv3r8q6.png" alt="Image description" width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Find the CSS selector for the above icon:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XnCMnBq1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/clclnkhngan0nxpiq7rv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XnCMnBq1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/clclnkhngan0nxpiq7rv.png" alt="Image description" width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;CSS selector: “.RNNXgb”&lt;br&gt;
use the CSS selector in hideSelectors for this scenario:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"scenarios": [
    {
      "label": "Chanchal",
      "url": "https://www.google.com/",
      "hideSelectors": [".RNNXgb"]
    }
  ]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to run the test, hit the below command from your project directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ backstop test
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;after it, a report will be autogenerated where you can see what changes are there between the reference images and test images.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YbQ1rIvm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lnt41lrebrqd5at50gxn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YbQ1rIvm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lnt41lrebrqd5at50gxn.png" alt="Image description" width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;that’s how you can see the changes in UI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Backstop approve
&lt;/h2&gt;

&lt;p&gt;If the failing test cases are intended changes, and you want to save them as the reference images for the next cycle, then run the below command on the terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ backstop approve
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VpPOy72y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ier1brs76ysc0axh2g85.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VpPOy72y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ier1brs76ysc0axh2g85.png" alt="Image description" width="800" height="211"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;You can always run a “backstop test” to test the UI changes whenever any feature is made live on your project. It will help to detect the UI Bugs on the Production server of any site.&lt;/p&gt;

&lt;p&gt;You can visit official GitHub site for more information: &lt;a href="https://github.com/garris/BackstopJS"&gt;https://github.com/garris/BackstopJS&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Follow my YouTube Channel: &lt;a href="https://www.youtube.com/@CodeZax"&gt;https://www.youtube.com/@CodeZax&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Hacktoberfest Challenge</title>
      <dc:creator>Chanchal K Maurya</dc:creator>
      <pubDate>Mon, 02 Nov 2020 10:59:23 +0000</pubDate>
      <link>https://dev.to/chanchalkmaurya/hacktoberfest-challenge-5541</link>
      <guid>https://dev.to/chanchalkmaurya/hacktoberfest-challenge-5541</guid>
      <description>&lt;h3&gt;
  
  
  [Introduction]
&lt;/h3&gt;

&lt;p&gt;Hey! I'm Chanchal K Maurya from India. I decided to participate in Hacktoberfest because i really wanted a start in open Source. I didn't know about open source before. I have a learnt a lot during this fest.&lt;/p&gt;

&lt;h3&gt;
  
  
  Background
&lt;/h3&gt;

&lt;p&gt;Now I know much about open source like how to make your own projects,how to contribute, how to collaborate with others,etc.&lt;br&gt;
I learnt about git and github during the Hacktoberfest.&lt;/p&gt;

&lt;h3&gt;
  
  
  Contributions
&lt;/h3&gt;

&lt;p&gt;I contributed in some of the repositories..&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;NovaStarCoder's Repo.&lt;/li&gt;
&lt;li&gt;Adarsh Repo.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Reflections
&lt;/h3&gt;

&lt;p&gt;The Hacktoberfest journey was awesome.It will be a great pleasure to participate in such Events.&lt;/p&gt;

</description>
      <category>hacktoberfest</category>
    </item>
  </channel>
</rss>
