小编Ser*_*eni的帖子

在开玩笑的报道中意外发现分支

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

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

some-dependency.ts

export class SomeDependency {}
Run Code Online (Sandbox Code Playgroud)

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');
    }
}
Run Code Online (Sandbox Code Playgroud)

some-service.spec

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

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

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

--------------------|----------|----------|----------|----------|-------------------|
File                |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line …
Run Code Online (Sandbox Code Playgroud)

code-coverage jestjs angular jest-preset-angular

6
推荐指数
2
解决办法
1851
查看次数

使用角度测试 fakeAsync 和 jest it.each

使用 Angular 8、@angular-builders/jest 8.0.2、jest 24.8,并给出以下测试通过

import { tick, fakeAsync } from '@angular/core/testing';

it('test 1000 milliseconds', fakeAsync(() => {
    const fn = jest.fn();
    setTimeout(() => {
        fn();
    }, 1000);

    tick(999);
    expect(fn).not.toHaveBeenCalled();
    tick(1);
    expect(fn).toHaveBeenCalled();
}));

Run Code Online (Sandbox Code Playgroud)

我想使用编写几个类似的测试it.each

it.each([[1000], [2000], [3000]])(
    'test %d milliseconds',
    fakeAsync(milliseconds => {
        const fn = jest.fn();
        setTimeout(() => {
            fn();
        }, milliseconds);

        tick(milliseconds - 1);
        expect(fn).not.toHaveBeenCalled();
        tick(1);
        expect(fn).toHaveBeenCalled();
    }),
);

Run Code Online (Sandbox Code Playgroud)

但我在每次测试中都遇到这个错误:

Expected to be running in 'ProxyZone', but it was not found.

    at Function.Object.<anonymous>.ProxyZoneSpec.assertPresent (node_modules/zone.js/dist/proxy.js:42:19)
    at node_modules/zone.js/dist/fake-async-test.js:588:47
Run Code Online (Sandbox Code Playgroud)

我缺少什么?

jestjs angular angular-test ts-jest

3
推荐指数
1
解决办法
7528
查看次数

我无法正确配置 jest 来导入模块 (setupFilesAfterEnv)

我使用它是@angular-builders/jest为了在测试角度项目时用玩笑替换业力。我喜欢有 2 个库为 jest:jest-extended和获取额外的匹配器@testing-library/jest-dom

我找不到自动导入匹配器的方法,这样我就不必在每个规范文件中导入它们。

重现问题的最小示例jest-extended

首先,创建一个 Angular 项目并安装 jest 依赖项

ng new --defaults my-project
cd my-project
yarn add -D jest @types/jest @angular-builders/jest jest-extended
Run Code Online (Sandbox Code Playgroud)

然后编辑angular.json以替换构建器

...
"test": {
    "builder": "@angular-builders/jest:run"
},
Run Code Online (Sandbox Code Playgroud)

到目前为止,我可以使用 jest 和命令运行并通过测试

...
"test": {
    "builder": "@angular-builders/jest:run"
},
Run Code Online (Sandbox Code Playgroud)

现在,我使用一个笑话扩展匹配器添加一个测试。在app.component.spec.ts

...
  it('should work with jest-extended matchers', () => {
    expect([1, 1, 1]).toBeArrayOfSize(3);
  });
Run Code Online (Sandbox Code Playgroud)

尝试#1

创造jest.config.js

ng test
Run Code Online (Sandbox Code Playgroud)

不起作用,我收到错误TS2339: Property 'toBeArrayOfSize' does not exist on type 'ArrayLikeMatchers<number>' …

testing typescript jestjs angular ts-jest

2
推荐指数
1
解决办法
8374
查看次数