6

我正在用玩笑(使用jest-preset-angular)测试一个角度项目。

收集覆盖率时,我得到一个未覆盖的分支,我不明白为什么。我可以用 3 个文件重现问题。

some-dependency.ts

export class SomeDependency {}

some-service.ts

import { Injectable } from '@angular/core';
import { SomeDependency } from './some-dependency';

@Injectable()
export class SomeService {
    constructor(private dependency: SomeDependency) {
        console.log('service created');
    }
}

some-service.spec

import { SomeService } from './some-service';

describe('DerivedClass', () => {
    it('should create', () => {
        expect(new SomeService(null)).toBeTruthy();
    });
});

通过运行yarn jest --coverage some-service,我得到以下报道:

--------------------|----------|----------|----------|----------|-------------------|
File                |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |
--------------------|----------|----------|----------|----------|-------------------|
All files           |      100 |       75 |      100 |      100 |                   |
 some-dependency.ts |      100 |      100 |      100 |      100 |                   |
 some-service.ts    |      100 |       75 |      100 |      100 |                 6 |
--------------------|----------|----------|----------|----------|-------------------|

在 HTML 报告中,我得到的关于未发现内容的信息太少。

在此处输入图像描述

我注意到移除@Injectable装饰器会使覆盖率恢复到 100%

有人有解释吗?有没有办法在保留@Injectable装饰师的同时获得 100% 的覆盖率?

编辑:我添加了一个 console.log 来证明构造函数被正确调用。黄色突出显示由 Istambul 报告提供,有助于查看未覆盖的分支。但是我这里没有分支,因为没有条件。

4

2 回答 2

4

通过与@markusdresch 创建的覆盖率确实为 100% 的全新项目进行比较,我终于发现ts-jest设置的一个选项jest.config.js会对代码覆盖率产生副作用。

{
    // ...
    globals: {
        'ts-jest': {
            // ...
            isolatedModules: true,
        },
    },
}

isolatedModules设置为 true 会导致原始问题中描述的未覆盖分支。通过将其设置为 false 或将其删除,覆盖率将恢复到 100%。

我希望我可以使用isolatedModules = true并且仍然有 100% 的覆盖率,但我想这应该是一个全新的问题。

于 2019-08-16T11:18:30.440 回答
1

我创建了一个全新的 Angular 应用程序,添加了 jest-preset-angular 和您提到的测试,它是 100% 的代码覆盖率。

查看https://github.com/markusdresch/angular-jest-example

---------------------|----------|----------|----------|----------|-------------------|
File                 |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |
---------------------|----------|----------|----------|----------|-------------------|
All files            |      100 |      100 |      100 |      100 |                   |
 app                 |      100 |      100 |      100 |      100 |                   |
  app.component.html |      100 |      100 |      100 |      100 |                   |
  app.component.ts   |      100 |      100 |      100 |      100 |                   |
 models              |      100 |      100 |      100 |      100 |                   |
  some-dependency.ts |      100 |      100 |      100 |      100 |                   |
 services            |      100 |      100 |      100 |      100 |                   |
  some.service.ts    |      100 |      100 |      100 |      100 |                   |
---------------------|----------|----------|----------|----------|-------------------|
于 2019-08-16T06:24:41.337 回答