Angularjs 因果报应/茉莉花/有棱角的托福被称为真正的因果报应
例如,在我的应用程序中,我有Angularjs 因果报应/茉莉花/有棱角的托福被称为真正的因果报应,angularjs,jasmine,karma-runner,karma-jasmine,angular-mock,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,
$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);
应用程序和测试都运行良好
但在测试中,我从未看到控制台消息
叫
所以我想知道在测试期间$on是否从未被触发
或者我错过了一些东西。如果您希望调用真正的
$emit()
,则必须在spyOn
之后显式设置它,如下所示:
spyOn($rootScope, '$emit').and.callThrough();
或者在Jasmine 1.3中:
spyOn($rootScope, '$emit').andCallThrough();
希望这能有所帮助。我刚刚尝试了.andCallThrough();但我一直没有看到“called”,嗯,似乎存在$rootScope问题,因为如果我将$on侦听器放在运行块中,那么您的
$emit
和$on
是否真的按顺序排列?如果是,这就是原因,您试图在订阅事件之前发出事件。尝试将$on
移动到$emit
之前。我在一个单独的控制器中有$on,控制器中的$emit连接到路由。我不明白为什么它在应用程序中有效,而在测试中无效。测试中似乎没有初始化您的独立控制器。如果你想测试它,你必须以某种方式使它被初始化。