测试在我的AngularJS单元测试中是否调用了条件

测试在我的AngularJS单元测试中是否调用了条件,angularjs,unit-testing,jasmine,Angularjs,Unit Testing,Jasmine,我已经在AngularJS中使用Karma测试运行程序和Jasmine测试框架设置了单元测试。我的代码覆盖率报告很好地显示了我的测试中覆盖了哪些行和条件。正是通过这份覆盖率报告,我意识到我的代码(见下文)中的if条件没有被测试。我是否需要为angular.forEach()调用创建一个模拟?如果是的话,具体怎么做?用ngMock 为了让我的问题更清楚一点,我想为您提供一个例子,在angular.forEach()调用中使用if条件 例如,假设我有以下服务: angular.module('myA

我已经在AngularJS中使用Karma测试运行程序和Jasmine测试框架设置了单元测试。我的代码覆盖率报告很好地显示了我的测试中覆盖了哪些行和条件。正是通过这份覆盖率报告,我意识到我的代码(见下文)中的
if
条件没有被测试。我是否需要为
angular.forEach()
调用创建一个模拟?如果是的话,具体怎么做?用ngMock

为了让我的问题更清楚一点,我想为您提供一个例子,在
angular.forEach()调用中使用
if
条件

例如,假设我有以下服务:

angular.module('myApp').service('myService', function () {
  function myFunction(myFunctionParameters) {

    // ... Some irrelevant code...

    var x = [];
    angular.forEach(xObjs, function(o) {
      if (some condition) {  // <--- Code coverage says this is not tested!!
        // do something...
      }
    });

    // ... Some more irrelevant code

    return // Something //
  }

  return {
    myFunction: myFunction
  };
});

不可能直接那样。但是,您可以在if条件下和之后在服务中设置一个变量。 这样,您将能够在测试中恢复,以检查是否调用了它

expect(yourService.getVariable()).toEqual(theValueThatYouExpect);

向前看,您可以想象在函数中增加一个变量来检查if被调用的次数。

直接这样做是不可能的。但是,您可以在if条件下和之后在服务中设置一个变量。
expect(yourService.getVariable()).toEqual(theValueThatYouExpect);
这样,您将能够在测试中恢复,以检查是否调用了它

expect(yourService.getVariable()).toEqual(theValueThatYouExpect);

接下来,您可以想象在函数中增加一个变量,以检查调用if的次数。

感谢您的回复。我评估了你的答案,但我认为这不是解决我问题的办法。我编辑了我的问题以包含代码覆盖率示例,清楚地解释了除了实际的if本身之外,所有行是如何被“覆盖”的?有什么想法吗?此外,如果我的想法是错误的,请纠正我,但在我的服务中添加代码是不对的,这“只”是计算我将在单元测试中使用的变量?是的,代码覆盖率确实是识别这一点的正确方法。我在我的项目中使用因果报应来做这件事。这很有趣,因为如果报道完成与否,它会逐行为您提供一个报告:此处相同。我使用业力覆盖来完成这项工作,并使用gulp来运行我的测试。尽管如此,我仍然无法确定如何确保我的“如果”条件包含在测试中?谢谢您的回复。我评估了你的答案,但我认为这不是解决我问题的办法。我编辑了我的问题以包含代码覆盖率示例,清楚地解释了除了实际的if本身之外,所有行是如何被“覆盖”的?有什么想法吗?此外,如果我的想法是错误的,请纠正我,但在我的服务中添加代码是不对的,这“只”是计算我将在单元测试中使用的变量?是的,代码覆盖率确实是识别这一点的正确方法。我在我的项目中使用因果报应来做这件事。这很有趣,因为如果报道完成与否,它会逐行为您提供一个报告:此处相同。我使用业力覆盖来完成这项工作,并使用gulp来运行我的测试。尽管如此,我还是无法弄清楚如何确保我的“如果”条件在测试中被涵盖?
expect(yourService.getVariable()).toEqual(theValueThatYouExpect);