与间谍进行单元测试失败.说间谍从未被称为

gao*_*ban 4 javascript unit-testing jasmine angularjs

这是我正在测试的代码

eventsApp.factory('userData', ['userResource', function(userResource){
    return{
    getUser: function(userName, callback){
        return userResource.get({userName:userName}, function(user){
        if(callback)
        callback(user);
        });

    };
}]);
Run Code Online (Sandbox Code Playgroud)

这是茉莉花的测试

describe('userData', function(){
    var mockUserResource;

    beforeEach(module('eventsApp'));

    beforeEach(function(){
        mockUserResource = {get: function(){} };

        module(function($provide){
            $provide.value('userResource', mockUserResource);
        });
    });

    it('should make a call to userResource.get with provided userName', inject(function(userData){

        userData.getUser('Bob');
        spyOn(mockUserResource, 'get');
        expect(mockUserResource.get).toHaveBeenCalledWith({userName:'Bob'});
    }));
});
Run Code Online (Sandbox Code Playgroud)

为什么这会失败?它说

"预期的间谍得到了[{userName:'Bob'}的调用,但从未被称为".

.toHaveBeenCalled() 也失败了.

gle*_*tre 14

你不应该在做GET请求之前设置间谍吗?

it('should make a call to userResource.get with provided userName', inject(function(userData){
    //arrange
    spyOn(mockUserResource, 'get');

    //act
    userData.getUser('Bob');

    //assert
    expect(mockUserResource.get).toHaveBeenCalledWith({userName:'Bob'});
}));
Run Code Online (Sandbox Code Playgroud)

编辑:安排-ACT-断言模式 ;)