我的ajax函数不被伊斯坦布尔覆盖

时间:2018-07-03 04:30:43

标签: javascript unit-testing code-coverage jestjs

我有一个问题,我有此功能

    authAnonymous: function (callback) {
    rest
      .post(wso2config.token.host + "/" + wso2config.token.path, {
        username: wso2config.clientId,
        password: wso2config.clientSecret,
        data: {
          username: wso2config.anonymousUser.username,
          password: wso2config.anonymousUser.password,
          grant_type: "password",
          redirect_uri: wso2config.redirect_uri,
          scope: "somescope:thisisit"
        }
      })
      .on("complete", function (data) {
        if (data.error) callback(data, null);
        else {
          data.anonym = true;
          callback(null, {
            openid_data: data
          });
        }
      });
  },

所以我想编写代码覆盖此功能,并使用Jest进行一些单元测试,这是单元测试代码

test("do login using authAnonymous", done => {
  openID.authAnonymous(function (error, data) {
    if (!error) {
      expect(data.anonym).toBeTruthy();
    } else {
      //expect(data.anonym).toBe(false);
    }
  });
  done();
});

某种程度上,此单元测试按预期工作,但代码覆盖范围内指出该语句未包含在内

这句话不包括在内

 this says statement is not covered

据我了解,我的代码可以正常运行,并且单元测试正在按预期方式工作,为什么开玩笑的代码覆盖率表明该语句未被覆盖,任何人都可以解释此语句如何被覆盖吗?以及为什么没有涵盖我的问题,我相信这是我的错,但是我不知道在这里进行什么调查

1 个答案:

答案 0 :(得分:0)

在完成所有操作之前,您正在呼叫done()。您需要在所有更改和检查完成后调用它:

test("do login using authAnonymous", done => {
  openID.authAnonymous(function (error, data) {
    if (!error) {
      expect(data.anonym).toBeTruthy();
    } else {
      //expect(data.anonym).toBe(false);
    }
    done(); // <-- at the end of callback
  });
});