使用mocha,chai

时间:2017-09-13 07:57:35

标签: node.js unit-testing mocha chai testcase

目前,我已使用mochachai为两个功能创建了测试。

他们应根据HTTP POST/GET请求的不同参数做出不同的反应。

但是,我想知道检查3个测试用例的最佳做法是什么,我希望它们具有相同的输入。

例如,

describe('Function A', function() {

it('should retrun 404 when receipt ID is invalid', function(done) {
    chai.request(server)
        .post('/generateSales/')
        .send(validParams1)
        .end(function(err, res){
            res.should.have.status(404);
            done();
        });
});

it('should retrun 404 when receipt ID is invalid', function(done) {
    chai.request(server)
        .post('/generateSales/')
        .send(validParams2)
        .end(function(err, res){
            res.should.have.status(404);
            done();
        });
});

it('should retrun 404 when receipt ID is invalid', function(done) {
    chai.request(server)
        .post('/generateSales/')
        .send(validParams3)
        .end(function(err, res){
            res.should.have.status(404);
            done();
        });
});


});

在单个it块中测试所有参数(validParams1,2,3)的正确方法是什么? (我希望他们有相同的回应)

2 个答案:

答案 0 :(得分:0)

由于异步问题,您不应该在it块内调用循环。

我使用it-each模块

找到了替代解决方案

以下链接显示了当您想在it块中使用20个API或20个测试用例时如何使用mocha处理异步测试循环

https://whitfin.io/asynchronous-test-loops-with-mocha/

答案 1 :(得分:0)

https://mochajs.org/#dynamically-generating-tests

describe('Function A', function() {
  let paramSets = [
    validParams1,
    validParams2,
    validParams3
  ]
  paramSets.forEach((paramSet)=>{
    // call it multiple times.
    it('should return 404 when receipt ID is invalid', function(done) {
      // this is technically a different function each time
      chai.request(server)
        .post('/generateSales/')
        .send(paramSet) // this is different for each function/test
        .end(function(err, res){
          res.should.have.status(404);
          done();
        });
    });
    // never call assert here.
    // The function passed to 'it' runs as the test.
    // The function passed to 'describe' runs first, and sets up all the tests.
  });
});