测试装饰的构造函数参数

时间:2018-11-17 00:36:03

标签: javascript typescript unit-testing mocha jestjs

我正在尝试测试使用inversify进行依赖注入并使用@inject()修饰参数的类。

@injectable()
export class SaveManager {
    constructor(
        @inject(INJECTABLE.STORAGE) storage: IStorage, //Uncovered Line: 15
        @inject(Configuration) configuration: Configuration //Uncovered Line: 16
    ) {
        this.storage = storage;
        this.configuration = configuration;
    }
}

但是此类的分支覆盖向我显示:

    @inject(INJECTABLE.STORAGE) storage: IStorage, //Uncovered Line: 15
    @inject(Configuration) configuration: Configuration //Uncovered Line: 16

这些行不包括在内。

File                     |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line  
SaveManager.ts           |      100 |    66.67 |      100 |      100 |          15,16 

在这里我应该测试什么才能达到100%的覆盖率,以及如何测试构造函数参数修饰符?

我知道我可以使用container.get(),但我也应该能够测试装饰器。

1 个答案:

答案 0 :(得分:1)

使用当前版本的软件包依赖项代码覆盖范围可以正常工作。 您可以使用以下任何一种测试,您的SaveManager的覆盖率将达到100%。

使用InversifyJS解析实例:

test('Resolve SaveManager', () => {
    const manager = myContainer.get(SaveManager);
    expect(manager).not.toBe(null);
});

直接创建实例:

test('Create new SaveManager', () => {
    const storage = myContainer.get<IStorage>(INJECTABLE.STORAGE);
    const config = myContainer.get<Configuration>(Configuration);

    const manager = new SaveManager(storage, config);
    expect(manager).not.toBe(null);
});

两种情况下的结果覆盖范围:

 PASS  tests/save-manager.test.ts
---------------------|----------|----------|----------|----------|-------------------|
File                 |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |
---------------------|----------|----------|----------|----------|-------------------|
...
 save-manager.ts     |      100 |      100 |      100 |      100 |                   |
---------------------|----------|----------|----------|----------|-------------------|

使用的软件包版本:

  • 打字稿3.5.3
  • 反转5.0.1
  • 开玩笑24.9.0
  • 反射元数据0.1.13