$ 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