Angular2 组件测试 - 错误:无法解析所有参数

Jam*_*ley 5 testing mocking jasmine angular

我正在第一次使用 Karma/Jasmine 等测试我的一个组件,并且主要关注测试文档。我的组件需要 3 个构造函数参数;

constructor(
  private myService: MyService,
  private renderer: Renderer,
  private element: ElementRef
) { }
Run Code Online (Sandbox Code Playgroud)

我试图根据文档的这一部分模拟/存根这些依赖项,如下所示;

// Mocks/Stubs
const myServiceStub = {};
class MockElementRef {}
class MockRenderer {}

// beforeEach block
beforeEach(() => {
  TestBed.configureTestingModule({
    declarations: [ MyComponent ],
    providers: [
      { provide: ElementRef, useClass: MockElementRef },
    { provide: Renderer, useClass: MockRenderer },
      { provide: MyService, useValue: myServiceStub},
    ]
  });

  fixture = TestBed.createComponent(MyComponent);
});
Run Code Online (Sandbox Code Playgroud)

尽管如此,每当我运行测试时,都会出现以下错误;

Error: Can't resolve all parameters for MyComponent: (?, ?, ?).
    at SyntaxError.ZoneAwareError (test.ts:9250:33)
    at SyntaxError.BaseError [as constructor] (test.ts:44243:16)
    at new SyntaxError (test.ts:44453:16)
    at CompileMetadataResolver._getDependenciesMetadata (test.ts:61503:31)
Run Code Online (Sandbox Code Playgroud)

我在这里缺少什么?谢谢!

小智 5

它可能是由循环 DI 引起的,尝试重构您的组件 MyComponent 以注入服务,如下所示:

constructor(@Inject(forwardRef(() => MyComponentService)) private myService: MyComponentService) {}
Run Code Online (Sandbox Code Playgroud)