Automatyczne testowanie za pomocą Chrome bez interfejsu graficznego

Jeśli chcesz przeprowadzić automatyczne testy w Chrome bez interfejsu graficznego, nie musisz szukać! Z tego artykułu dowiesz się, jak rozpocząć korzystanie z Karma do biegania i tworzenia testów Mocha+Chai.

Co to jest?

Karma, Mocha, Chai, Chrome bez interfejsu graficznego, o rety!

Karma to platforma testowa, która współpracuje z dowolną z najpopularniejszych platform testowych (Jasmine, Mocha, QUnit).

Chai to biblioteka asercji, która współpracuje z węzłem i przeglądarką. Tego drugiego potrzebujemy.

Chrome bez interfejsu graficznego to sposób na uruchamianie przeglądarki Chrome w środowisku bez interfejsu graficznego bez interfejsu użytkownika. Jedną z zalet Chrome bez interfejsu graficznego (w przeciwieństwie do testowania bezpośrednio w Node) jest to, że testy JavaScript będą wykonywane w tym samym środowisku co użytkownicy witryny. Przeglądarka Chrome bez interfejsu graficznego daje dostęp do rzeczywistego kontekstu, bez zbędnego nakładu pracy związanego z uruchomieniem pełnej wersji Chrome.

Konfiguracja

Instalacja

Aby zainstalować Karma, odpowiednie wtyczki i testy uruchamiające, skorzystaj z programu yarn:

yarn add --dev karma karma-chrome-launcher karma-mocha karma-chai
yarn add --dev mocha chai

lub użyj npm:

npm i --save-dev karma karma-chrome-launcher karma-mocha karma-chai
npm i --save-dev mocha chai

W tym poście używam Mocha i Chai, ale jeśli nie jesteś fanem, wybierz swoją ulubioną bibliotekę asercji, która działa w przeglądarce.

Skonfiguruj Karma

Utwórz plik karma.conf.js używający programu uruchamiającego ChromeHeadless.

karma.conf.js

module.exports = function(config) {
  config.set({
    frameworks: ['mocha', 'chai'],
    files: ['test/**/*.js'],
    reporters: ['progress'],
    port: 9876,  // karma web server port
    colors: true,
    logLevel: config.LOG_INFO,
    browsers: ['ChromeHeadless'],
    autoWatch: false,
    // singleRun: false, // Karma captures browsers, runs the tests and exits
    concurrency: Infinity
  })
}

Pisanie testu

Utwórz test w: /test/test.js.

/test/test.js

describe('Array', () => {
  describe('#indexOf()', () => {
    it('should return -1 when the value is not present', () => {
      assert.equal(-1, [1,2,3].indexOf(4));
    });
  });
});

Przeprowadzanie testów

Dodaj w package.json skrypt test, który będzie uruchamiał Karma w naszych ustawieniach.

package.json

"scripts": {
  "test": "karma start --single-run --browsers ChromeHeadless karma.conf.js"
}

Po uruchomieniu testów (yarn test) przeglądarka Chrome bez interfejsu graficznego powinna się uruchomić i wysłać wyniki do terminala:

Dane wyjściowe z Karmy.

Tworzenie własnego programu uruchamiającego Chrome bez interfejsu graficznego

Menu z aplikacjami ChromeHeadless jest świetne, bo od razu po uruchomieniu sprawdza się w Chrome bez interfejsu graficznego. Zawiera odpowiednie flagi Chrome i uruchamia wersję Chrome do zdalnego debugowania na porcie 9222.

Czasami jednak możesz chcieć przekazać do Chrome niestandardowe flagi lub zmienić port debugowania zdalnego, którego używa program uruchamiający. Aby to zrobić, utwórz pole customLaunchers, które rozszerza podstawową Menu z aplikacjami ChromeHeadless:

karma.conf.js

module.exports = function(config) {
  ...

  config.set({
    browsers: ['Chrome', 'ChromeHeadless', 'MyHeadlessChrome'],

    customLaunchers: {
      MyHeadlessChrome: {
        base: 'ChromeHeadless',
        flags: ['--disable-translate', '--disable-extensions', '--remote-debugging-port=9223']
      }
    },
  }
};

Uruchomienie wszystkich narzędzi w Travis CI

Skonfigurowanie Karma do przeprowadzania testów w Chrome bez interfejsu graficznego to trudna część. Ciągła integracja w systemie Travis jest od razu po kilku linijkach.

Aby uruchomić testy w Travis, użyj programu dist: trusty i zainstaluj stabilny dodatek do Chrome:

.travis.yml

language: node_js
node_js:
  - "7"
dist: trusty # needs Ubuntu Trusty
# Note: if you switch to sudo: false, you'll need to launch Chrome with --no-sandbox.
# See https://github.com/travis-ci/travis-ci/issues/8836
sudo: required
addons:
  chrome: stable # have Travis install Chrome stable.
cache:
  yarn: true
  directories:
    - node_modules
install:
  - yarn
script:
  - yarn test