###问题: 亲们,我要测试获取短信验证码接口,短信服务器发送短信到用户手机成功之后,会返回“验证码已发送”。###
做法:我mock一个假数据去测试这个接口,测试的数据运行了,但是源码覆盖率没有覆盖。
源码: `CheckCode.getVerifyCode = function(mobile, msgContent, cb) { if(typeof(msgContent) == ‘function’){ cb = msgContent; msgContent = null; } let re = /^1\d{10}$/; if (!re.test(mobile)) { return cb(Boom.badRequest(“请输入正确手机号”, {mobile: mobile})); }
CheckCode.findById(mobile, function(err, result) {
if (err) {
CheckCode.app.logger.error({mobile: mobile, error: err}, '查找手机验证码出错');
return cb(err);
}
if (result) {
let now = Date.now();
if (new Date(result.createAt).valueOf() + config.repeatRequestGap > now) {
return cb(null, "验证码已发送请耐心等待");
}
}
let verifyCode = getRandomInt(1000, 9999);
sendMsg(mobile, verifyCode, msgContent).then(result => {
result = qs.parse(result);
CheckCode.app.logger.debug({mobile: mobile, verifyCode: verifyCode, result: result}, '发送手机验证码成功');
//发送成功
if (result.mterrcode && result.mterrcode == '000') {
CheckCode.upsert({
mobile: mobile,
code: verifyCode,
createAt: new Date(),
expireAt: new Date(Date.now() + config.codeValidityTime)
}, (err, result) => {
if (err) {
CheckCode.app.logger.error({mobile: mobile, error: err, result: result}, '插入手机验证码出错');
return cb(err);
}
return cb(null, {code: 0, msg: '验证码已发送'});
});
} else {
CheckCode.app.logger.error({mobile: mobile, result: result}, '发送手机验证码出错');
return cb({code: result.mterrcode, message: "验证码发送失败"});
}
}).catch(err => {
CheckCode.app.logger.error({mobile: mobile, error: err}, '发送手机验证码出错');
return cb(err);
});
});
}; ` 我mock的语句:
it('send code success', function () { stub = sinon.stub(CheckCode, "getVerifyCode"); stub.withArgs(mockConstantData.CheckCode(1).mobile).returns({"code": "0", "msg": "验证码已发送"}); let sendResult = stub(mockConstantData.CheckCode(1).mobile); expect(sendResult.msg).to.equal('验证码已发送'); expect(sendResult.code).to.equal('0'); });
如何测试啊?
另外如何测试一个没有暴露出来的闭包啊?rewire好像不行