我是第一次在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 ???]
})
})
您需要使用sinonjs为res.send
,res.write
和res.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
----------------|---------|----------|---------|---------|-------------------
非常感谢。......您的回答对我很有帮助。