【问题标题】:Testing decorated constructor parameters测试修饰的构造函数参数
【发布时间】:2019-04-20 04:30:23
【问题描述】:

我正在尝试测试一个使用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(),但我也应该可以测试装饰器。

【问题讨论】:

  • 似乎测试用例覆盖工具存在一个未解决的问题:github.com/istanbuljs/istanbuljs/issues/70,除非您使用的是其他工具。
  • @DipenShah 根据那个未解决的问题 - 这取决于版本,但我升级了 mocha - chai 和所有东西 - 仍然遇到 % Branch non-cover。我什至尝试注入空/未定义的组合,它不会下降

标签: javascript typescript unit-testing mocha.js jestjs


【解决方案1】:

当前版本的包依赖代码覆盖率工作正常。 您可以使用下面的任何测试,您将获得 100% 的 SaveManager 覆盖率。

使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    相关资源
    最近更新 更多