【问题标题】:using angular testing fakeAsync with jest it.each开玩笑地使用角度测试 fakeAsync it.each
【发布时间】:2021-03-11 23:02:42
【问题描述】:

使用 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();
}));

我想用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();
    }),
);

但我在每次测试时都收到此错误:

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

我错过了什么?

【问题讨论】:

  • 您找到解决方法了吗?
  • @distante:没有我想要的那么整洁,但作为一种解决方法,我用describe.each 包裹了一个标准的it,这样我就可以毫无问题地使用fakeAsync。这可以完成工作,但会在规范文件和控制台输出中增加一些噪音
  • 谢谢。你应该考虑写一个你的问题的答案。也许它不像你说的那样漂亮,但它可以帮助其他人找到更好的方法。

标签: angular jestjs angular-test ts-jest


【解决方案1】:

到目前为止,我想到的最佳解决方法是将each 部分移动到describe 包装器中,以便fakeAsync 用于“经典”it

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

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

它给测试代码和控制台输出增加了一些噪音,但至少现在测试通过了。

【讨论】:

    【解决方案2】:

    这似乎是jest-preset-angularzone-patch 文件的问题。它不会修补 it.eachtest.each 以在 fakeAsync 区域中运行。我已经提交了一个错误https://github.com/thymikee/jest-preset-angular/issues/339

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-25
      • 1970-01-01
      • 2019-01-04
      • 2020-02-29
      • 2021-08-18
      • 2018-06-03
      • 2020-02-06
      • 2020-03-25
      相关资源
      最近更新 更多