3

我有這樣的服務模擬的方法:如何在同樣的服務

var myApp = angular.module('myApp', []); 

myApp.factory('myService', function() { 

    var a = function() { 
     return b(); 
    } 

    function b() { 
     return 'foo'; 
    } 

    return { 
     a: a 
    }; 
}); 

現在,我想嘲笑b();,例如測試a();通過讓它返回。我的測試會是這樣的:

it('should call a() and return string bar', function() { 
    // mock function b() here 
    expect(myService.a()).toBe('bar'); 
}); 

我該如何在這種情況下模擬b();?我正在考慮使用$provide,但它似乎只適用於$inject

回答

0

您可以使用spyOn。這裏有一個例子:

beforeEach(function(){ 
    spyOn(myService, 'b').and.returnValue('bar'); 
}); 

it('should call a() and return string bar', function() { 
    expect(myService.a()).toBe('bar'); 
}); 

瞭解更多關於間諜這裏http://jasmine.github.io/2.0/introduction.html#section-Spies

+0

謝謝您的回答,我忘了提,'B();'是不是由*服務*返回。這是否仍然可以通過使用*間諜*來實現?我已經更新了我的問題。 – DonJuwe

+0

你可以在'describe()'塊中啓動'myService'而不需要'spyOn(myService,'b').and.returnValue('bar');'myService = {b:function(value){} };'?因此,它會模擬整個服務,包括'a();' – DonJuwe

+0

不,我不能假定你已經初始化了。關於你以前的問題不幸,我不知道。 – pokemzok

相關問題