Jasmine - 测试一个简单的初始化函数

时间:2016-06-18 10:16:11

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

我从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成为可能,但正如我所说,我不知道测试它的正确方法是什么。

谢谢。

1 个答案:

答案 0 :(得分:0)

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

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

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