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

Jasmine - Test a simple initialization function

我开始使用 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 如上所述,但正如我所说,我不知道测试它的正确方法是什么。

谢谢。

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

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

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