gpt4 book ai didi

javascript - Angular2 TestBed 无法找到没有 @Inject 的嵌套提供程序

转载 作者:行者123 更新时间:2023-11-28 05:03:22 25 4
gpt4 key购买 nike

我想测试以下服务:

import { Injectable } from "@angular/core";

import DepA from "./dep-a"

@Injectable()
export default class TestService {
private readonly DepA: DepA;

public constructor(depA: DepA) {
this.DepA = depA;
}
}

它依赖于另一个名为 DepA 的服务:

import { Injectable } from "@angular/core";

@Injectable()
export default class DepA {
}

我现在想使用以下内容为 TestService 创建单元测试:

import { async, inject, TestBed } from '@angular/core/testing';

import DepA from "./dep-a";
import TestService from "./test-service";

class MockDepA {
}

describe("TestService", () => {
beforeEach(() => {
let dep = new DepA();

TestBed.configureTestingModule({
providers: [
TestService,
{ provide: DepA, useValue: dep },
]
});
});

it('should construct', inject(
[TestService], (testService: TestService) => {
expect(testService).toBeDefined();
}));
});

这给了我以下错误:

$ ./node_modules/karma/bin/karma start karma.conf.js
Chrome 55.0.2883 (Windows 10 0.0.0) TestService should construct FAILED
Error: Can't resolve all parameters for TestService: (?).
Chrome 55.0.2883 (Windows 10 0.0.0): Executed 1 of 1 (1 FAILED) (0.033 secs / 0.021 secs)

当我将 TestService 的构造函数从 public constructor(depA: DepA) { 更改为 public constructor(@Inject(DepA) depA: DepA) { 时,它似乎工作正常。有没有什么原因导致我必须在单元测试中使用 @Inject() 注释我的注入(inject),但在正常情况下它却可以正常工作而不需要注释?

最佳答案

这可能不是人们正在寻找的答案;但我重写了调试环境,现在输出是多个 .spec.js 文件,而不是使用 Karma Typescript 预处理器。我不知道为什么它不起作用;只是这样确实对我有用。

关于javascript - Angular2 TestBed 无法找到没有 @Inject 的嵌套提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41962663/

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