3 回答

TA貢獻(xiàn)1834條經(jīng)驗(yàn) 獲得超8個(gè)贊
您可以使用來(lái)將模擬注入服務(wù)中$provide。
如果您具有以下具有依賴(lài)項(xiàng)的服務(wù),該服務(wù)具有名為getSomething的方法:
angular.module('myModule', [])
.factory('myService', function (myDependency) {
return {
useDependency: function () {
return myDependency.getSomething();
}
};
});
您可以按如下方式注入myDependency的模擬版本:
describe('Service: myService', function () {
var mockDependency;
beforeEach(module('myModule'));
beforeEach(function () {
mockDependency = {
getSomething: function () {
return 'mockReturnValue';
}
};
module(function ($provide) {
$provide.value('myDependency', mockDependency);
});
});
it('should return value from mock dependency', inject(function (myService) {
expect(myService.useDependency()).toBe('mockReturnValue');
}));
});
請(qǐng)注意,由于有調(diào)用,$provide.value因此實(shí)際上不需要在任何地方顯式注入myDependency。它發(fā)生在注入myService的過(guò)程中。在此處設(shè)置嘲諷依賴(lài)時(shí),它可能同樣容易成為間諜。

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超3個(gè)贊
從我的角度來(lái)看,無(wú)需自己模擬服務(wù)。只需在服務(wù)上模擬功能。這樣,您就可以像在整個(gè)應(yīng)用程序中一樣對(duì)您的真實(shí)服務(wù)進(jìn)行有角度的注入。然后,使用Jasmine的spyOn功能根據(jù)需要在服務(wù)上模擬功能。
現(xiàn)在,如果服務(wù)本身是一個(gè)函數(shù),而不是可以使用的對(duì)象spyOn,則還有另一種解決方法。我需要執(zhí)行此操作,然后發(fā)現(xiàn)一些對(duì)我來(lái)說(shuō)非常有效的方法。

TA貢獻(xiàn)1845條經(jīng)驗(yàn) 獲得超8個(gè)贊
除了John Galambos的回答:如果您只想模擬服務(wù)的特定方法,則可以這樣做:
describe('Service: myService', function () {
var mockDependency;
beforeEach(module('myModule'));
beforeEach(module(function ($provide, myDependencyProvider) {
// Get an instance of the real service, then modify specific functions
mockDependency = myDependencyProvider.$get();
mockDependency.getSomething = function() { return 'mockReturnValue'; };
$provide.value('myDependency', mockDependency);
});
it('should return value from mock dependency', inject(function (myService) {
expect(myService.useDependency()).toBe('mockReturnValue');
}));
});
添加回答
舉報(bào)