Sök…


Anmärkningar

Nightwatch har tillhandahållit Acceptance och End-to-End-test för Meteor-appar sedan v0.5 dagar och har hanterat migrationer från PHP till Spark to Blaze och React; och alla större kontinuerliga integrationsplattformar. För ytterligare hjälp, se:

Nightwatch API-dokumentation
Nightwatch.js Google Group

Konfiguration

Det främsta skälet till att Nightwatch är så kraftfullt är på grund av den utmärkta konfigurationsfilen. Till skillnad från de flesta andra testramar är Nightwatch helt konfigurerbar och anpassningsbar till olika miljöer och teknikstackar.

.meteor / nightwatch.json

Följande konfigurationsfil är för Meteor v1.3 och senare och stöder två miljöer ... en default som startar webbläsaren för kromförare och en phantom som kör testen i en huvudlös miljö.

{
  "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 och användning

För att få Nightwatch att fungera behöver du en lokal kopia av selen som är en kommando-och-kontrollserver som hanterar automatiserade webbläsareinstanser. Du behöver också en webbläsare som selen kan styra, till exempel kromförare eller phantomjs .

Lägg till följande avvikelser till ditt package.json :

{
  "devDependencies": {
    "nightwatch": "0.9.8",
    "selenium-server-standalone-jar": "2.45.0",
    "chromedriver": "2.19.0",
    "phantomjs-prebuilt": "2.1.12"
  }
}

Installera sedan alla skador.

cd myapp
meteor npm install

Du ska då kunna köra Nightwatch med följande kommandon:

nightwatch -c .meteor/nightwatch.json
nightwatch -c .meteor/nightwatch.json --env phantom

Om du inte har skrivit några tester eller konfigurerat din mappstruktur ännu, kan du få några fel.

Ställa in lanseringsskript

I roten till din applikation ska det finnas en package.json fil, där du kan definiera skript och avvikelser.

{
  "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",
  }
}

Du kommer då att kunna starta nattur med följande kommandon:

meteor npm run-script nightwatch
meteor npm run-script phantom

I det här exemplet skulle det nästan vara lättare att bara köra nightwatch -c .meteor/nightwatch.json . Men med mer komplexa kommandon, med komplexa miljövariabler, alternativ och inställningar, blir detta ett mycket användbart sätt att specificera devops-skript för ett team.

Mappstruktur

En grundläggande Nightwatch-installation för Meteor kommer att ha följande kataloger och filer installerade.

/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

Datadriven testning

Nightwatch accepterar en andra globals.json konfigurationsfil som injicerar data i själva Meteor.settings , mycket liknande hur Meteor.settings gör data från kommandoraden tillgänglig i hela appen.

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
    }
  }
}

Du kan sedan skriva dina tester som inte är hårdkodade med specifika användare, lösenord, sökingångar etc.

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow