我有一个可以进行单元测试的组件,但是我遇到了问题。我不知道如何在我的测试中模拟@Attribute装饰器的工作。
Error: No provider for String!
@Component({...})
export class MyComponent {
constructor(@Attribute("handle") private handle: string) { }
}
我特别需要知道提供什么'在我的测试中。
{ provide: ??, useValue: "" }
更新
这是测试设置
describe("MyComponent", () => {
let component: MyComponent;
beforeEach(() => {
this.injector = ReflectiveInjector.resolveAndCreate([
{ provide: ??, useValue: "" }, //@Attribute provider??
... // other mocked providers
MyComponent
]);
component = this.injector.get(MyComponent);
});
...
});
答案 0 :(得分:1)
这应该对你有用
{ provide: String, useValue: "test" },
AppComponent
以下也可以使用
import { Inject} from '@angular/core';
let token = 'handle';
Inject(token)(MyComponent, null, 0); // 0 is index of your parameter
let injector = ReflectiveInjector.resolveAndCreate([
{ provide: token, useValue: "test" },
如果您有多个string
参数,例如
export class MyComponent {
constructor(
@Attribute("handle") private handle: string,
@Attribute("handle2") private handle2: string) {}
然后你可以写:
Inject('handle')(MyComponent, null, 0);
Inject('handle2')(MyComponent, null, 1);
let injector = ReflectiveInjector.resolveAndCreate([
{ provide: 'handle', useValue: "test" },
{ provide: 'handle2', useValue: "test2" },
<强> Plunker Example 强>