Автоматизировать функциональное тестирование в node.js
Я проверил некоторые библиотеки NPM для тестирования веб-страниц или веб-сервисов. Но все они ожидают, что сервер уже работает. Поскольку я хочу автоматизировать функциональное тестирование, как я могу настроить пакет NPM таким образом, чтобы
- Может запустить сервер
- Протестируйте приложение
- Остановить сервер
Так что я могу проверить это локально, а также на онлайн-инструментах CI, таких как travis-ci или circleci.
Случай 1: веб-сервис
Я написал пакет NPM, который запускает HTTP-сервер nodejs. Это можно запустить из командной строки $stubmatic
, В настоящее время я использую 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)?
Я использую их, и у меня никогда не было никаких проблем во всех тестах, которые я делаю до сих пор.
Документация в ссылках содержит всю информацию, необходимую для построения теста.