gpt4 book ai didi

javascript - Jasmine 和 Angular : Injecting a service into a service mock

转载 作者:行者123 更新时间:2023-12-03 07:22:52 26 4
gpt4 key购买 nike

我们为具有许多服务的 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 () {} }
);
}

现在,如果我希望他们实际上做一些事情而不是什么都不做,例如拒绝 promise ,我就会遇到注入(inject)依赖项的问题。我想要的是:

function FakeServiceA($provide, $q) {
$provide.value(
'ServiceA'
{ foo: function () { return $q.reject('Nope!'); } }
);
}

但是这样注入(inject)$q似乎是不可能的。注册模块时还有其他方法可以实现吗?

最佳答案

$q 不能这样注入(inject)

function FakeServiceA($provide, $q) { ...

因为指定的依赖项是由提供程序注入(inject)器注入(inject)的,如所述here (可以在那里使用 $provide 的事实暗示了这一点),而服务实例 ($q) 必须由实例注入(inject)器注入(inject)。显然,它无法注入(inject) $q,因为此时它还没有从 $qProvider 实例化。

它必须是这样的:

function FakeServiceA($provide) {
$provide.factory('ServiceA', function ($q) {
return { foo: function () { return $q.reject('Nope!'); } }
});
}

关于javascript - Jasmine 和 Angular : Injecting a service into a service mock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36130072/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com