【发布时间】:2017-01-26 22:43:40
【问题描述】:
我正在第一次使用 Karma/Jasmine 等测试我的一个组件,并且大部分时间都在关注 docs on testing。我的组件需要 3 个构造函数参数;
constructor(
private myService: MyService,
private renderer: Renderer,
private element: ElementRef
) { }
我已尝试模拟/存根基于this section of the docs 的那些依赖项,如下所示;
// 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);
});
尽管如此,每当我运行测试时,我都会收到以下错误;
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)
我在这里缺少什么?谢谢!
【问题讨论】:
-
你需要
TestBed.compileComponents,这是异步的。请参阅使用模板测试组件的部分。 -
不是@jonrsharpe,模板是内联的,不在单独的文件中
标签: angular testing mocking jasmine