2016-04-15 19 views
1

こんにちは私は角度サービスを持っています。私のユニットテストで関数が呼び出されたかどうかをテストする方法(単位テスト角度)

... 

return { 
    setMixpanel: function(searchObject){ 
        searchObject["referrer"] ? mixpanel.register({"$referrer":searchObject["referrer"]}) : mixpanel.register({"$referrer":""}); 

    } 
} 

私はおそらくregisterとともにspyOnmixpanelに持っています。しかし、私は何とかmixpanel.registerを模倣する必要があります。

mixpanel.registerを正しくモックするにはどうすればよいですか?コードはどこに行きますか?

次のように私はそれを嘲笑:

var mixpanel={ 
     register : function(object){ 
     return object 
     } 
    }; 

をしかし、ここで、私はこのコードを置けばいいの?それが正しいか?

誰かが私を助けてくれることを願っていますか?

EDITは: テスト自体は、おそらくこの

it('should test', function(){ 
    spyOn(mixpanel,'register'); 
    redirectService.setMixpanel(search); 
    expect(mixpanel.register).toHaveBeenCalledWith('...'); 
}) 

のようにしかし、私はmixpanelを模擬する必要があることを行うために見えます。私がミックスパネルをspyOnするだけで、私はエラーになります。

答えて

2

最初にspyObjectを作成する必要があります。あなたのサービスを模擬する必要

beforeEach(function() { 
    myServiceSpy = jasmine.createSpyObj('myService'); 

    module(function ($provide) { 
     $provide.value('myService', myServiceSpy); 
    }); 
}); 

テスト

describe("myService", function() { 
    it("calls the getUser() function", function() { 

     /* Maybe this line unnecessary, cant try it atm */ 
     spyOn(service, "getUser"); 
     expect(service.getUser).toHaveBeenCalled(); 
    }); 
}); 

あなたはmixpanel.registerが呼び出されたかどうかをテストしたい場合は、あなたがあなたのmixpanelのスパイオブジェクトを作成する必要はありません。 $を指定すると、実際のサービスの代わりにスパイを使用するようテストに指示します。

describe('mixPanel', function() { 
    mixPanelSpy = jasmine.createSpyObj('mixPanel'); 

    beforeEach(module(function($provide) { 
    $provide.value("mixpanel", mixPanelSpy); 
    })); 

    beforeEach(inject(function (_mixpanelService_) { 
     mixpanelService = _mixpanelService_; 
    })); 

    it('should set mixpanel', function() { 
     mixpanelService.setMixPanel('test'); 
     expect(mixpanel.register).toBeCalled(); 
    }); 
}); 

私の心の外に、多分あなたはあなたのコメントを

+0

感謝を修正する必要があるいくつかの衝突がそこにいることを書きました。私はそれにスパイを作成しなければならないことを知っています。このようなもの。 spyOn(mixpanel、 'register'); redirectService.setMixpanel(obejct); expect(mixpanel.register).toHaveBeenCalledWith( '...');しかし、私がmixpanel.registerを最初にモックしなければ、それは認識されません – Dribel

+0

詳細については、あなたの質問を編集してテストコードを共有してください – trollr

+0

私は私の投稿を編集します。それはあなたを助けるべきだと思う:) – trollr

関連する問題