Автоматизировать функциональное тестирование в node.js

Я проверил некоторые библиотеки NPM для тестирования веб-страниц или веб-сервисов. Но все они ожидают, что сервер уже работает. Поскольку я хочу автоматизировать функциональное тестирование, как я могу настроить пакет NPM таким образом, чтобы

  1. Может запустить сервер
  2. Протестируйте приложение
  3. Остановить сервер

Так что я могу проверить это локально, а также на онлайн-инструментах CI, таких как travis-ci или circleci.

Случай 1: веб-сервис

Я написал пакет NPM, который запускает HTTP-сервер nodejs. Это можно запустить из командной строки $stubmatic, В настоящее время я использую 2 подхода, чтобы проверить это,

  1. Вручную: я запускаю его вручную из командной строки. Затем запустите тесты.
  2. Автомат: я использую exec модуль для запуска команды Unix, которая может запустить приложение и запустить pkill Команда, чтобы убить приложение. Но для этой автоматизации мое приложение должно быть установлено на тестовом компьютере.

Случай 2: веб-сайт

Я создал пакет NPM: fast-xml-parser и создал демо-страницу в репо, чтобы я мог быть протестирован в браузере. Чтобы проверить демонстрационную страницу, я в настоящее время запускаю локальный сервер, используя http-server Пакет npm вручную. Протестируйте приложение.

Что может быть лучшим способом написания автоматизированных функциональных тестов для приложений узла js?

Замечания:

  • Я никогда не использовал бегунов, таких как глоток или ворчание. Поэтому я не уверен, могут ли они помочь в этом случае.
  • В случае 1 мое приложение запускает узел js собственного HTTP-сервера. Я не использую какие-либо сторонние приложения, такие как express В настоящее время.

3 ответа

Решение

Случай 1: веб-сервис

Задача 1 В качестве nodejs server.close() не работал Я скопировал вставить этот фрагмент в каждый тестовый файл, который запускает мой веб-сервис.

try{
    server.setup(options);
    server.start();
}catch(err){
    console.log(err);
}

После завершения всех тестов сервер останавливается.

** Проблема 2, которую я использовал chai-http неправильно. Вот полное рабочее решение.

//Need to be placed before importing chai and chai-http
if (!global.Promise) {
  global.Promise = require('q');
}

var server = require('.././lib/server');
var chai = require('chai')
  , chaiHttp = require('chai-http');

 chai.use(chaiHttp);

try{
    server.setup(someoptions);
    server.start();
}catch(err){
    console.log(err);
}

describe('FT', function () {

  describe('scenario::', function () {

    it('responds to POST', function (done) {
        chai.request("http://localhost:9999")
            .post('/someurl')
            .then(res => {
                expect(res.status).toBe(200);
                //console.log(res.text);
                done();
            }).catch( err => {
                console.log(err);
                done();
            });
    });

});

Случай 2: Сайт Это было довольно просто.

  • я использовал http-server чтобы запустить сервер, чтобы мои HTML-файлы были доступны.
  • Я использовал Zombie JS для тестирования браузера. (Есть много других вариантов, доступных для тестирования браузера)

Вот код

process.env.NODE_ENV = 'test';

const Browser = require('zombie');
const httpServer = require('http-server');

describe("DemoApp", function() {
  var browser = new Browser({site: 'http://localhost:8080'});
  var server = httpServer.createServer();
  server.listen(8080);

  beforeEach(function(done){
      browser.visit('/', done);
  });

  describe("Parse XML", function() {

    it("should parse xml to json", function(done) {
       browser.pressButton('#submit');
       browser.assert.text('#result', 'some result text');
       done();
    });
   });

   afterEach(function(){
       server.close();
   })
});

В этом вопросе упоминается новая система контейнеров Docker для Travis, которая может быть продублирована локально. Это может быть способ: Как запустить travis-ci локально

Вы смотрели на supertest (управляемую SuperAgent библиотеку для тестирования HTTP-серверов) и ожидали (библиотека утверждений)( задокументировано здесь) с mocha (Test Framework)?

Я использую их, и у меня никогда не было никаких проблем во всех тестах, которые я делаю до сих пор.

Документация в ссылках содержит всю информацию, необходимую для построения теста.

Другие вопросы по тегам