如何在Angular点击处理程序

时间:2015-07-22 20:49:37

标签: javascript angularjs jasmine karma-runner

我目前正在对我的Angular控制器进行单元测试,而我的代码覆盖范围中唯一落后的部分是点击处理程序中的函数以及这些函数中的语句。

例如,function(cap)...表示与下面的点击处理程序相关的function not coveredplayersService.setCap...个州statement not covered

vm.setCap = function(cap) {
  playersService.setCap({playerId: playerId}, {limit: cap});
};

我将如何测试这样的函数及其中的语句?我只是在寻找基本测试(expect(function).toHaveBeenCalled)。

1 个答案:

答案 0 :(得分:1)

好了测试一下,你会想要使用你的playerService的模拟版本,你可以将它注入你的控制器。

describe("Controller: yourController", function () {
var mockResponse = {};
var mockService = {
    setCap: function(playerId, limit){
        mockResponse.playerId = playerId,
        mockResponse.limit = limit
    }
};

var mockParams = 'cap';
var $controller;
beforeEach(inject(function (_$controller_) {
    $controller = _$controller_;
}))
it("Should call the service on click", function () {
    spyOn(mockService, 'setCap').and.callThrough();
    var testedController = $controller('yourController', { playersService:mockService });
    testedController.setCap(mockParams);
    expect(mockService.toHaveBeenCalled).toHaveBeenCalled();
    expect(mockResponse.limit.limit).toBe(mockParams);
})
});

这将为您提供功能的白盒和黑盒测试示例。