如何在ng2单元测试中模拟@Attribute装饰器字符串提供程序?

时间:2017-08-04 15:04:24

标签: angular unit-testing typescript

我有一个可以进行单元测试的组件,但是我遇到了问题。我不知道如何在我的测试中模拟@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);
    });
    ...
});

1 个答案:

答案 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