Suche…
Bemerkungen
Nightwatch bietet seit v0.5 Tagen Akzeptanz- und End-to-End-Tests für Meteor-Apps an und hat Migrationen von PHP nach Spark nach Blaze und React verwaltet. und alle wichtigen Continuous Integration-Plattformen. Weitere Hilfe finden Sie unter:
Aufbau
Der Hauptgrund dafür, dass Nightwatch so leistungsfähig ist, liegt in der hervorragenden Konfigurationsdatei. Im Gegensatz zu den meisten anderen Test-Frameworks ist Nightwatch vollständig konfigurierbar und kann an verschiedene Umgebungen und Technologiestacks angepasst werden.
.meteor / nightwatch.json
Die folgende Konfigurationsdatei ist für Meteor v1.3 und höher und unterstützt zwei Umgebungen ... eine default
, die den chromedriver Browser startet, und eine phantom
Umgebung , die die Tests in einer Headless - Umgebung ausgeführt wird .
{
"nightwatch": {
"version": "0.9.8"
},
"src_folders": [
"./tests/nightwatch/walkthroughs"
],
"custom_commands_path": [
"./tests/nightwatch/commands"
],
"custom_assertions_path": [
"./tests/nightwatch/assertions"
],
"output_folder": "./tests/nightwatch/reports",
"page_objects_path": "./tests/nightwatch/pages",
"globals_path": "./tests/nightwatch/globals.json",
"selenium": {
"start_process": true,
"server_path": "./node_modules/starrynight/node_modules/selenium-server-standalone-jar/jar/selenium-server-standalone-2.45.0.jar",
"log_path": "tests/nightwatch/logs",
"host": "127.0.0.1",
"port": 4444,
"cli_args": {
"webdriver.chrome.driver": "./node_modules/starrynight/node_modules/chromedriver/bin/chromedriver"
}
},
"test_settings": {
"default": {
"launch_url": "http://localhost:5000",
"selenium_host": "127.0.0.1",
"selenium_port": 4444,
"pathname": "/wd/hub",
"silent": true,
"disable_colors": false,
"firefox_profile": false,
"ie_driver": "",
"screenshots": {
"enabled": false,
"path": "./tests/nightwatch/screenshots"
},
"desiredCapabilities": {
"browserName": "chrome",
"javascriptEnabled": true,
"acceptSslCerts": true,
"loggingPrefs": {
"browser": "ALL"
}
},
"exclude": "./tests/nightwatch/unittests/*",
"persist_globals": true,
"detailed_output": false
},
"phantom": {
"desiredCapabilities": {
"browserName": "phantomjs",
"javascriptEnabled": true,
"databaseEnabled": false,
"locationContextEnabled": false,
"applicationCacheEnabled": false,
"browserConnectionEnabled": false,
"webStorageEnabled": false,
"acceptSslCerts": true,
"rotatable": false,
"nativeEvents": false,
"phantomjs.binary.path": "./node_modules/starrynight/node_modules/phantomjs-prebuilt/bin/phantomjs"
}
},
"unittests": {
"selenium": {
"start_process": false,
"start_session": false
},
"filter": "./tests/nightwatch/unittests/*",
"exclude": ""
}
}
}
Installation & Nutzung
Um Nightwatch zum Laufen zu bringen, benötigen Sie eine lokale Kopie von Selen , einem Befehls- und Steuerungsserver, der automatisierte Browserinstanzen verwaltet. Sie benötigen außerdem einen Webbrowser, den Selen steuern kann, beispielsweise Chromdriver oder Phantomjs .
Fügen Sie Ihrer package.json
die folgenden devDependencies package.json
:
{
"devDependencies": {
"nightwatch": "0.9.8",
"selenium-server-standalone-jar": "2.45.0",
"chromedriver": "2.19.0",
"phantomjs-prebuilt": "2.1.12"
}
}
Dann installieren Sie alle Abhängigkeiten.
cd myapp
meteor npm install
Sie sollten Nightwatch dann mit den folgenden Befehlen ausführen können:
nightwatch -c .meteor/nightwatch.json
nightwatch -c .meteor/nightwatch.json --env phantom
Wenn Sie noch keine Tests geschrieben oder Ihre Ordnerstruktur eingerichtet haben, werden möglicherweise Fehler angezeigt.
Startskripte einrichten
Im Stammverzeichnis Ihrer Anwendung sollte sich eine package.json
Datei befinden, in der Sie Skripts und devDependencies definieren können.
{
"name": "myapp",
"version": "1.0.0",
"scripts": {
"start": "meteor --settings settings-development.json",
"nightwatch": "nightwatch -c .meteor/nightwatch.json",
"phantom": "nightwatch -c .meteor/nightwatch.json --env phantom",
}
}
Anschließend können Sie Nightwatch mit den folgenden Befehlen starten:
meteor npm run-script nightwatch
meteor npm run-script phantom
In diesem Beispiel wäre es fast einfacher, nightwatch -c .meteor/nightwatch.json
. Mit komplexeren Befehlen, mit komplexen Umgebungsvariablen, Optionen und Einstellungen wird dies jedoch sehr nützlich, um Devops-Skripts für ein Team anzugeben.
Ordnerstruktur
Bei einer grundlegenden Nightwatch-Installation für Meteor werden die folgenden Verzeichnisse und Dateien installiert.
/myapp
/myapp/.meteor/nightwatch.json
/client/main.html
/client/main.js
/client/main.css
/tests
/tests/nightwatch
/tests/nightwatch/assertions
/tests/nightwatch/commands
/tests/nightwatch/data
/tests/nightwatch/logs
/tests/nightwatch/pages
/tests/nightwatch/reports
/tests/nightwatch/screenshots
/tests/nightwatch/walkthroughs
/tests/nightwatch/walkthroughs/critical_path.js
/tests/nightwatch/globals.json
Datengesteuertes Testen
Nightwatch akzeptiert eine zweite Konfigurationsdatei von globals.json
, die Daten in den Testläufer selbst injiziert. Meteor.settings
ähnelt der Meteor.settings
der Meteor.settings
Daten von der Befehlszeile aus in der App verfügbar macht.
globals.json
{
"default" : {
"url" : "http://localhost:3000",
"user": {
"name": "Jane Doe",
"username" : "janedoe",
"password" : "janedoe123",
"email" : "[email protected]",
"userId": null
}
},
"circle" : {
"url" : "http://localhost:3000",
"user": {
"name": "Jane Doe",
"username" : "janedoe",
"password" : "janedoe123",
"email" : "[email protected]"
"userId": null
}
},
"galaxy" : {
"url" : "http://myapp.meteorapp.com",
"user": {
"name": "Jane Doe",
"username" : "janedoe",
"password" : "janedoe123",
"email" : "[email protected]"
"userId": null
}
}
}
Sie können dann Ihre Tests schreiben, die nicht mit bestimmten Benutzern, Kennwörtern, Sucheingaben usw. fest codiert sind.
module.exports = {
"Login App" : function (client) {
client
.url(client.globals.url)
.login(client.globals.user.email, client.globals.user.password)
.end();
}
};