我检查了一些NPM库来测试网页或网络服务。但所有人都希望服务器已经运行。由于我想自动化功能测试,如何以这样的方式设置NPM包
这样我就可以在本地进行测试,也可以在travis-ci或circleci等在线CI工具上进行测试。
案例1:网络服务
我写了一个启动nodejs HTTP(s)服务器的NPM包。它可以从命令行$stubmatic
启动。目前,我使用2种方法来测试它,
exec
模块运行unix命令,该命令可以启动应用程序并运行pkill
命令来终止应用程序。但是对于这种自动化,我的应用程序需要安装在测试机器上。案例2:网站
我创建了一个NPM包:fast-xml-parser
并在repo中创建了一个演示页面,以便我可以在浏览器中进行测试。为了测试演示页面,我目前使用http-server
npm包手动启动本地服务器。测试应用程序。
为节点js应用程序编写自动功能测试的更好方法是什么?
注意:
express
。答案 0 :(得分:0)
这个问题提到了一个可以在本地复制的Travis新Docker容器系统。这可能是一种方式:How to run travis-ci locally
答案 1 :(得分:0)
您是否使用supertest (SuperAgent driven library for testing HTTP servers)查看了expect (Assertions library)和documented here(mocha (Test Framework))?
我使用它们,直到现在我所做的所有测试都没有任何问题。
链接中的文档包含构建测试所需的所有信息。
答案 2 :(得分:0)
案例1:网络服务
问题1
由于nodejs server.close()
无效。我复制了将这个片段粘贴到每个启动我的webservice的测试文件中。
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文件。这是代码
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();
})
});