$ cd ~/…/atelier-BSjs/
$ npm install backstopjs
$ backstop init
backstop.json
en backstop.json.save
backstop-starter.json
en backstop.json
backstop.json
id
: 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 approve
selectors
: "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 reference
true
à 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 test
removeSelectors
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 test
postInteractionWait
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.json
Pour en savoir plus, je vous invite à consulter le dépôt officiel :
https://github.com/garris/BackstopJS