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:

Nightwatch-API-Dokumentation
Nightwatch.js Google-Gruppe

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();
  }
};


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow