簡體   English   中英

Jasmine&Angular:將服務注入服務模擬

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM