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)
| 归档时间: |
|
| 查看次数: |
5670 次 |
| 最近记录: |