karma / jasmine / angular toHaveBeenCalledWith真的被称为

时间:2014-08-17 15:23:50

标签: angularjs jasmine karma-runner karma-jasmine angular-mock

在我的应用中,例如我已经

$rootScope.$emit('loggedin',data.user);
$rootScope.$on('loggedin', function(event,user) {
    console.log('called');           
});

在我的测试中

spyOn($rootScope, '$emit');

var response = {
    "success":1,
    "user":{
        "id":1,
        "email":"lama@test.test",
        "fullname":"Lama user",
        "username":"lamauser",
        "groups":["Users"]
    },
    "logged":1
};
$httpBackend.when('POST', '/api/v1/user').respond(200,response);
$scope.save();
$httpBackend.flush();
expect($scope.errors.length).toEqual(0);
expect($rootScope.$emit).toHaveBeenCalledWith('loggedin',response.user);

应用和测试都运行良好 但在测试中我从未看到控制台消息 称为

所以我想知道在测试期间是否永远不会触发 或者我错过了什么。

1 个答案:

答案 0 :(得分:0)

如果您希望调用真实的$emit(),则必须在spyOn之后明确地设置它:

spyOn($rootScope, '$emit').and.callThrough();

或者在Jasmine 1.3中:

spyOn($rootScope, '$emit').andCallThrough();

希望这有帮助。