在node.js中自动执行功能测试

时间:2017-01-30 09:24:25

标签: node.js npm functional-testing

我检查了一些NPM库来测试网页或网络服务。但所有人都希望服务器已经运行。由于我想自动化功能测试,如何以这样的方式设置NPM包

  1. 它可以启动服务器
  2. 测试应用程序
  3. 停止服务器
  4. 这样我就可以在本地进行测试,也可以在travis-ci或circleci等在线CI工具上进行测试。

    案例1:网络服务

    我写了一个启动nodejs HTTP(s)服务器的NPM包。它可以从命令行$stubmatic启动。目前,我使用2种方法来测试它,

    1. manual:我从命令行手动启动它。然后运行测试。
    2. 自动:我使用exec模块运行unix命令,该命令可以启动应用程序并运行pkill命令来终止应用程序。但是对于这种自动化,我的应用程序需要安装在测试机器上。
    3. 案例2:网站

      我创建了一个NPM包:fast-xml-parser并在repo中创建了一个演示页面,以便我可以在浏览器中进行测试。为了测试演示页面,我目前使用http-server npm包手动启动本地服务器。测试应用程序。

      为节点js应用程序编写自动功能测试的更好方法是什么?

      注意:

      • 我从未使用像gulp或grunt这样的任务跑步者。因此,我不确定他们是否可以在这种情况下提供帮助。
      • 在案例1中,我的应用程序启动节点js本机HTTP服务器。我目前没有使用任何第三方应用,例如express

3 个答案:

答案 0 :(得分:0)

这个问题提到了一个可以在本地复制的Travis新Docker容器系统。这可能是一种方式:How to run travis-ci locally

答案 1 :(得分:0)

您是否使用supertest (SuperAgent driven library for testing HTTP servers)查看了expect (Assertions library)documented heremocha (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文件。
  • 我使用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();
   })
});