【问题标题】:Jasmine - Test a simple initialization functionJasmine - 测试一个简单的初始化函数
【发布时间】:2016-06-18 10:16:10
【问题描述】:

我从 Karma 和 Jasmine 开始进行单元测试。我正在进行第一次真正的测试,我想知道我是否做得很好。

我有这个方法调用三个初始化函数。

myApp.initializer.initializeApp = function () {
    myApp.initializer.eventDelegation();
    myApp.initializer.initializeGlobals();
    myApp.scrollManager.initialize();  
};

如果我不做测试,Karma-Coverage 告诉我 initializeApp 没有被覆盖,所以我想做一个测试来验证是否一切都正确。需要进行什么样的测试?如果我编写这两个不同的测试,Karma-coverage 告诉我功能现在已被覆盖。

describe ("Initializations suite", function(){
    it ("must check if functions are defined before call them", function(){
      spyOn(myApp.initializer, "eventDelegation");
      myApp.initializer.initializeApp();
      expect(myApp.initializer.eventDelegation).toHaveBeenCalled();
   });
});

describe ("Initializations suite", function(){
   it ("must check if functions are defined before call them", function(){
      expect(myApp.initializer.initializeApp).not.toThrow();
   });
});

这两个测试都使 initializeApp 覆盖,但正如我所说,我不知道测试这个的正确方法是什么。

谢谢。

【问题讨论】:

    标签: unit-testing jasmine tdd karma-runner code-coverage


    【解决方案1】:

    更好的方法不是 spyOn myApp.initializer.eventDelegation(); 然后期待该方法应该做的一些事情。

    我们通常spyOn 方法不存在于我们要测试的文件中。例如,如果我正在为依赖于服务的 angularjs 控制器文件编写测试用例,那么我将 spyOn 已在我的控制器中调用的服务方法。

    您在上述测试中所做的是,模拟了文件中已经存在的方法。更好的方法是调用myApp.initializer.initializeApp 并期望myApp.initializer.eventDelegation(); 已被调用。还要确保尽可能多地期待行为。这将提高您的测试用例的质量。

    【讨论】:

    • 感谢您的评论 Siddath ajmera。我在您的回答中的理解是,由于涵盖更多行为而进行两个测试是正确的,并且在第一个测试中只需删除 spyOn?
    猜你喜欢
    • 2015-09-21
    • 2017-09-10
    • 2023-03-13
    • 2016-05-27
    • 2017-09-14
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    相关资源
    最近更新 更多