单元测试中mock数据不走覆盖率
发布于 1 年前 作者 sunfeng90 1167 次浏览 来自 问答

###问题: 亲们,我要测试获取短信验证码接口,短信服务器发送短信到用户手机成功之后,会返回“验证码已发送”。###

做法:我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好像不行
1 回复

没有人回答,我自己再顶一下!

回到顶部