0

たとえば、私のアプリでは

$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 がトリガーされないか、何かを見落としているかどうか疑問に思っています。

4

1 に答える 1

0

real$emit()を呼び出したい場合は、次のように明示的に設定する必要がありますspyOn

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

または Jasmine 1.3 では:

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

お役に立てれば。

于 2014-08-17T15:50:36.923 に答える