开玩笑 - 简单的测试很慢

2022-08-30 04:45:14

我正在使用Jest来测试一个角度应用程序,运行简单的测试需要很长时间,我似乎无法弄清楚为什么。

我的玩笑设置 :package.json

"jest": {
  "modulePaths": [
    "<rootDir>/src",
    "<rootDir>/node_modules"
  ],
  "testPathIgnorePatterns": [
    ".git/.*",
    "node_modules/.*"
  ],
  "transformIgnorePatterns": [
    "node_modules/.*",
    ".*\\.js"
  ],
  "setupTestFrameworkScriptFile": "<rootDir>/src/setupJest.js",
  "preset": "jest-preset-angular",
  "testEnvironment": "jsdom",
  "testRegex": "src/app/.*\\.spec\\.ts$",
  "moduleFileExtensions": [
    "ts",
    "js",
    "json"
  ],
  "verbose": true,
  "cacheDirectory": ".jest-cache",
  "coveragePathIgnorePatterns": [
    ".*\\.(shim\\.ngstyle|ngfactory)\\.ts"
  ],
  "globals": {
    "ts-jest": {
      "tsConfigFile": "./tsconfig.json"
    },
    "__TRANSFORM_HTML__": true
  }
}

我的Jest设置文件:

'use strict';
require('core-js/es6/reflect');
require('core-js/es7/reflect');
require('zone.js');
require('zone.js/dist/proxy.js');
require('zone.js/dist/sync-test');
require('zone.js/dist/async-test');
require('zone.js/dist/fake-async-test');
require('jest-zone-patch');

const getTestBed = require('@angular/core/testing').getTestBed;
const BrowserDynamicTestingModule = require('@angular/platform-browser-dynamic/testing').BrowserDynamicTestingModule;
const platformBrowserDynamicTesting = require('@angular/platform-browser-dynamic/testing')  .platformBrowserDynamicTesting;

getTestBed().initTestEnvironment(
    BrowserDynamicTestingModule,
    platformBrowserDynamicTesting()
);

这是我的简单测试:

fdescribe('RichTextEditorComponent', () => {
  it('should be fast', () => {
    expect(true).toBeTruthy();
  });
});

有没有人知道为什么这需要9秒以上的时间?enter image description here


答案 1

另一种可能性是ts-jest很慢。有一个关于这个问题的问题,并没有完全解决。

讨论了各种解决方法。它们包括设置隔离模块 =true 和 。也就是说,在--maxWorkers=1jest.config.js

'use strict';

module.exports = {
    preset: 'ts-jest',
    testEnvironment: 'node',
    globals: {
        'ts-jest': {
            isolatedModules: true
        }
    },
}

并运行

yarn test --maxWorkers=1

可能值得一试。或者,可以放弃ts-jest并使用babel转译。


答案 2

阅读以下两个链接:

https://itnext.io/how-to-make-your-sluggish-jest-v23-tests-go-faster-1d4f3388bcdd https://github.com/facebook/jest/issues/7963

以下是要考虑的事项列表。它们并不特定于您的情况,但是由于问题的标题非常笼统,我认为它们可能会帮助一定比例的访问者。它们不应该被盲目地尝试,它们只是一个研究的起点。

尝试加快您的开玩笑测试的事情:

  1. 在监视模式下运行--watch

    jest 优化时使用 .--watch

  2. 在主机上运行而不是在 Docker 中运行?->我以前使用过,当我改用主机时发现它更快。docker exec -it <containername> yarn test

  3. 升级jest版本似乎有一些错误使某些版本变慢 https://github.com/facebook/jest/pull/8046

    注意:遵守〜和^版本能指,如果你知道你在做什么,你可能只想删除并重新添加,这只会让你得到最新的yarn upgradeyarn remove jestyarn add -D jest

  4. 将测试环境从 jsdom 更改为 node

"jest": {
  "testEnvironment": "node"
}
  1. 同步运行测试。允许开玩笑优化?

添加选项--runInBand

  1. 设置最大工作人员数可能会使其更快?

添加选项--maxWorkers=4

在我的情况下,我升级了jest版本,开始使用--watch和--runInBand并在我的主机上运行而不是通过docker运行,我的测试时间从2分钟增加到10秒。我不知道在我的情况下到底是什么问题。