NodeJS: как провести e2e-тестирование NightmareJS при запуске приложения Docker

Я создаю образ/контейнер докера для тестирования из моего приложения для продуктивной сборки (приложение nodeJS). Теперь я хочу провести e2e-тестирование с использованием mocha/chai и nightmareJS. Итак, я создал очень простой тестовый файл.

Теперь моя проблема заключается в том, как проверить работающее приложение. Итак, я хочу «загрузить» приложение, например

- goto http://localhost
- check if login form is existing
- do login
- check if login was successful

Я не знаю, как это сделать в моем образе докера/файле e2e.js...

Вот как я создаю образ докера:

Файл Docker

# Use the production image as base image
FROM productive_build:latest

# Copy the test files
COPY e2e.js /

# Override the NODE_ENV environment variable to 'dev', in order to get required test packages
ENV NODE_ENV dev

# 1. Get test packages; AND
# 2. Install our test framework - mocha
RUN (cd programs/server && npm install)
RUN npm install -g mocha
RUN npm install chai nightmare

# Override the command, to run the test instead of the application
CMD ["mocha", "e2e.js", "--reporter", "spec"]

А вот как выглядит мой базовый файл e2e.js:

e2e.js

var Nightmare = require('nightmare'),
    expect = require('chai').expect

describe('test', function () {
  it('should always be true', function () {
    var nightmare = Nightmare()
    nightmare.end()
    expect(true).to.be.true
  })
})

person user3142695    schedule 10.05.2017    source источник


Ответы (2)


Я не совсем уверен, глядя на ваш Dockerfile, но глядя на ваш комментарий

Переопределите команду, чтобы запустить тест вместо приложения

Вам все равно нужно будет запустить сам веб-сайт после установки его зависимостей, а затем mocha. Поскольку docker предназначен для одновременного запуска только одного процесса, вы можете посмотреть supervisord, но вы также можете поместить свой веб-сайт в качестве фонового процесса, а затем запустите свой тест.

Использование точки входа в сценарий bash вместо вашего CMD:

ENTRYPOINT ["./bin/run.sh"]

А сам скрипт будет примерно таким:

#!/bin/bash
npm start & mocha e2e.js --reporter spec

Что касается самого теста, вы можете сделать что-то подобное, чтобы проверить процесс входа в систему. Это всего лишь пример, вам может понадобиться настроить несколько вещей, таких как селекторы элементов и некоторые другие вещи, но это все же хорошая отправная точка.

var Nightmare = require('nightmare')
var expect = require('chai').expect

describe('test login', function () {

 it('should login and display my username', function (done) {
    var nightmare = Nightmare({ show: false })

    nightmare
      .goto('http://localhost:8000') // your local url with the correct port
      .type('#login', 'your login') // change value of the login input
      .type('#password', 'your password')
      .click('#submit') // click the submit button
      .wait('#my-username') // wait for this element to appear (page loaded)
      .evaluate(function () {
        // query something once logged on the page
        return document.querySelector('#my-username').innerText
      })
      .end()
      .then(function (result) {
        // the result will be the thing you grabbed from the window in the evaluate
        expect(result).to.equal('user3142695')
        done()
      })
      .catch(done)

  })

})
person Balthazar    schedule 13.05.2017
comment
Спасибо. Думаю, это именно то, что я ищу. Только еще один вопрос: куда мне положить скрипт? Нужно ли добавлять COPY run.sh /, а затем использовать ENTRYPOINT ["run.sh"]? - person user3142695; 13.05.2017
comment
И как мне узнать правильный порт, который используется для локального хоста? - person user3142695; 13.05.2017
comment
Да, вам нужно скопировать скрипт в контейнер, если вы поместите его в /, вам, возможно, придется добавить его в команду. Что касается порта, вам просто нужно указать тот же URL, куда вы идете, разрабатывая локально - person Balthazar; 13.05.2017

Уточнение: я не знаю nightmarejs или всех ваших зависимостей.

Вам понадобится инструмент мониторинга для node.js. nodemon — хороший вариант, а в Docker есть руководство по использованию nodemon и Visual Studio Code для оперативной отладки приложения node.js.

Вот руководство: https://github.com/docker/labs/blob/master/developer-tools/nodejs-debugging/VSCode-README.md

person Mano Marks    schedule 12.05.2017