使用Mocha和Chai为带有response.send()的函数编写测试用例

问题描述 投票:0回答:2

我是第一次在node.js中进行测试。我在下面创建了一个简单的程序。 html表单有两个字段,名称和年龄。当用户提交表单时,将在“ ageVerification.js”中的证书函数中检查年龄,因为该年龄应该大于18。如果年龄小于18,则返回null,否则返回一些随机数。有同样的getAuth函数抛出错误,然后我将使用expect(auth.getAuth.bind(this,req,{})).to.throw('whatever thrown')但是如果函数以res.send(“ some string”)结尾,那么如何测试该函数。预先感谢。

  **code to test**
    const certificate=require('./ageVerification')
    module.exports.getAuth=function(req,res){
    if(certificate.certificate(req.body.ageText)!=null && 
            req.body.uName=='prateek'){
            res.write("Hello Prateek")
            return res.end()
        }

        if(certificate.certificate(req.body.ageText)!=null && 
            req.body.uName!='prateek')
            return res.send("You need to register first")

        if(certificate.certificate(req.body.ageText)==null){
             res.write("You are not of required age")
             return res.end()
        }
   }

 **test case**
const certificate=require('../ageVerification')
const auth=require('../controller')
const chai=require('chai')
const expect=require('chai').expect;
describe("Age field is null",function(){
    it("name is correct",function(done){
        const req={
            body:{
                ageText:null,
                uName:'prateek'
            }
        }
         expect(auth.getAuth.bind(this,req,{})).[I'm stuck here ???]

    })
})
node.js unit-testing mocha chai
2个回答
0
投票

您需要使用sinonjsres.sendres.writeres.end方法创建存根,并断言是否已调用它们以检查代码逻辑。

例如

controller.js

const certificate = require('./certificate');

module.exports.getAuth = function(req, res) {
  if (certificate.certificate(req.body.ageText) != null && req.body.uName == 'prateek') {
    res.write('Hello Prateek');
    return res.end();
  }

  if (certificate.certificate(req.body.ageText) != null && req.body.uName != 'prateek')
    return res.send('You need to register first');

  if (certificate.certificate(req.body.ageText) == null) {
    res.write('You are not of required age');
    return res.end();
  }
};

certificate.js

exports.certificate = function(age) {
  return age;
};

controller.test.js

const auth = require('./controller');
const sinon = require('sinon');

describe('61943894', function() {
  afterEach(() => {
    sinon.restore();
  });
  it('should return required age message', function() {
    const mReq = {
      body: {
        ageText: null,
        uName: 'prateek',
      },
    };
    const mRes = {
      write: sinon.stub().returnsThis(),
      send: sinon.stub().returnsThis(),
      end: sinon.stub(),
    };
    auth.getAuth(mReq, mRes);
    sinon.assert.calledOnceWithExactly(mRes.write, 'You are not of required age');
    sinon.assert.calledOnce(mRes.end);
  });

  it('should say hello', () => {
    const mReq = {
      body: {
        ageText: 29,
        uName: 'prateek',
      },
    };
    const mRes = {
      write: sinon.stub().returnsThis(),
      send: sinon.stub().returnsThis(),
      end: sinon.stub(),
    };
    auth.getAuth(mReq, mRes);
    sinon.assert.calledOnceWithExactly(mRes.write, 'Hello Prateek');
    sinon.assert.calledOnce(mRes.end);
  });

  it('should return register message', () => {
    const mReq = {
      body: {
        ageText: 29,
        uName: '',
      },
    };
    const mRes = {
      write: sinon.stub().returnsThis(),
      send: sinon.stub().returnsThis(),
      end: sinon.stub(),
    };
    auth.getAuth(mReq, mRes);
    sinon.assert.calledOnceWithExactly(mRes.send, 'You need to register first');
  });
});

带有覆盖率报告的单元测试结果:

  61943894
    ✓ should return required age message
    ✓ should say hello
    ✓ should return register message


  3 passing (34ms)

----------------|---------|----------|---------|---------|-------------------
File            | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
----------------|---------|----------|---------|---------|-------------------
All files       |     100 |       90 |     100 |     100 |                   
 certificate.js |     100 |      100 |     100 |     100 |                   
 controller.js  |     100 |       90 |     100 |     100 | 12                
----------------|---------|----------|---------|---------|-------------------

0
投票

非常感谢。......您的回答对我很有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.