[英]Jasmine & Angular: Injecting a service into a service mock
我們為具有許多服務的Angular應用程序編寫了一套單元測試套件。 提供偽造的服務實現(通常不做任何事情)插入應用模塊很方便,例如:
'use strict';
describe('ServiceUnderTest', function () {
beforeEach(module('app', FakeServiceA, FakeServiceB));
...
}
// Fake service implementations (global functions):
function FakeServiceA($provide) {
$provide.value(
'ServiceA'
{ foo: function () {} }
);
}
function FakeServiceB($provide) {
$provide.value(
'ServiceB'
{ bar: function () {} }
);
}
現在,如果我希望他們實際做某事而不是什么,例如,拒絕一個諾言,我就會遇到注入依賴項的問題。 我想要的是:
function FakeServiceA($provide, $q) {
$provide.value(
'ServiceA'
{ foo: function () { return $q.reject('Nope!'); } }
);
}
但是用這種方式注入$q
似乎是不可能的。 注冊模塊時還有其他方法可以實現嗎?
$ q不能以這種方式注入
function FakeServiceA($provide, $q) { ...
因為指定的依賴項是由提供者注入程序注入的,如此處所述( $provide
可以在此處使用的事實對此有所暗示),而服務實例($ q)則必須由實例注入器注入。 顯然,它不能注入$q
因為此時尚未從$qProvider
實例化它。
它必須是這樣的:
function FakeServiceA($provide) {
$provide.factory('ServiceA', function ($q) {
return { foo: function () { return $q.reject('Nope!'); } }
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.