$ cd ~/…/atelier-BSjs/
            
          $ npm install backstopjs
            
          $ backstop initbackstop.json en backstop.json.savebackstop-starter.json en backstop.jsonbackstop.jsonid : identifiant utilisé pour le nommage des capturesviewport : tableau des résolutions pour lesquels les tests doivent être effectuésscenarios : scénarios de tests à réaliser
                label : nom donné aux captures du scénariourl : url à tester (relative ou absolue)paths : chemin des dossiers BackstopJSreport : format du rapport de sortie (HTML ou jUnit)
              engine : moteur de rendu utilisé par BackstopJS (Chrome-Headless, PhantomJS or SlimerJS)
              asyncCaptureLimit : nombres de captures d'écran générées en parallèle
              asyncCompareLimit : nombres de captures d'écran comparées en parallèle
              misMatchThreshold : pourcentage de différence autorisé avant que le temps n'échoue
              $ backstop reference
            
          $ backstop test
            
          Ajoutez les lignes suivantes dans le fichier _src/css/custom.css :
.label {
  display: inline-block;
  padding-top: .3em;
  padding-bottom: .4em;
}
              $ backstop test$ backstop approveselectors :  "document" | "viewport" | ".selecteur"
backstop.json :,
{
  "label": "Viewport",
  "url": "/_src/index.html",
  "selectors": [
    "viewport"
  ]
}
              
              $ backstop test$ backstop reference --filter=Viewport,
{
  "label": "Alerts",
  "url": "/_src/index.html",
  "selectors": [
    ".alert"
  ]
}
              $ backstop referencetrue à la propriété selectorExpansion
{
  "label": "Alerts",
  "url": "/_src/index.html",
  "selectors": [ ".alert" ],
  "selectorExpansion": true
}"expect": 3
{
  "label": "Alerts",
  "url": "/_src/index.html",
  "selectors": [ ".alert" ],
  "selectorExpansion": true,
  "expect": 3
}
              $ backstop testremoveSelectors permet de masquer un sélecteur
                {
  "label": "Alerts",
  "url": "/_src/index.html",
  "removeSelectors" : [
    ".alert-danger"
  ],
  "selectors": [ ".alert" ],
  "selectorExpansion": true,
  "expect": 3
}$ backstop test"onReadyScript": "puppet/onReady.js",
"viewports": […],
"onReadyScript": "puppet/onReady.js",
              ,
{
  "label": "Hover",
  "url": "/_src/index.html",
  "hoverSelectors": [
    ".nav-pills li:nth-child(2) a"
  ],
  "selectors": [
    ".nav-pills"
  ]
}
              $ backstop reference_src/css/custom.css pour y ajouter la règle suivante :
.nav > li > a {
  transition: background-color 1.25s ease-in-out;
}
              $ backstop testpostInteractionWait pour retarder la capture le temps que l'interaction ait lieu
{
  "label": "Hover",
  "url": "/_src/index.html",
  "postInteractionWait": 1250,
  "hoverSelectors": [
    ".nav-pills li:nth-child(2) a"
  ],
  "selectors": [
    ".nav-pills"
  ]
}
              $ backstop test,
{
  "label": "Click",
  "url": "/_src/index.html",
  "clickSelectors": [
   ".navbar-inverse .dropdown-toggle"
  ],
  "selectors": [
    ".navbars"
  ]
}
              $ backstop reference{
  "label": "Click : tablet",
  "url": "/_src/index.html",
  "viewports": [
    {
      "label": "tablet",
      "width": 1024,
      "height": 768
    }
  ],
  "clickSelectors": [ ".navbar-inverse .dropdown-toggle" ],
  "selectors": [ ".navbars" ]
}
              $ backstop reference,
{
  "label": "Click : phone",
  "url": "/_src/index.html",
  "viewports": [
    {
      "label": "phone",
      "width": 320,
      "height": 480
    }
  ],
  "postInteractionWait" : 300,
  "clickSelectors": [
   ".navbar-toggle"
  ],
  "selectors": [
    ".navbar-inverse"
  ]
}
            
          {
  "label": "Click : phone",
  "url": "/_src/index.html",
  "viewports": [
    {
      "label": "phone",
      "width": 320,
      "height": 480
    }
  ],
  "postInteractionWait" : ".navbar-collapse.in",
  "clickSelectors": [ ".navbar-toggle" ],
  "selectors": [ ".navbar-inverse" ]
}
            
          scrollToSelector : génère un scroll initial avant que la capture ne soit prise
              onReady)
            cookiePath : permet l'import de cookie au format JSON
              onBefore)readySelector : conditionne la prise de capture à l'existence du sélecteur dans le DOMreadyEvent : conditionne la prise de capture à un log spécifique dans la console.delay : impose un délai avant que la capture soit prisepackage.json les lignes suivantes :
{
  "scripts": {
    "reference": "backstop reference",
    "test": "backstop test",
    "approve": "backstop approve"
  }
}
            npm run test"report": ["CI"]"report" : "backstop openReport" dans package.jsonPour en savoir plus, je vous invite à consulter le dépôt officiel :
            
https://github.com/garris/BackstopJS