IT이야기

농담 - 간단한 테스트가 느림

cyworld 2022. 3. 21. 09:02
반응형

농담 - 간단한 테스트가 느림

나는 각 앱을 테스트하기 위해 제스트를 사용하고 있는데 간단한 테스트가 실행되려면 정말 오랜 시간이 걸리고 그 이유를 알 수 없을 것 같아.

다도에 있는 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초 이상 걸리는지 아는 사람 있어?여기에 이미지 설명을 입력하십시오.

또 다른 가능성은 ts-jest가 느리다는 것이다.그것에 대한 이슈가 있었고, 완전히 해결되지는 않았다.

다양한 해결책이 논의되고 있다.세팅과 세팅으로 구성되어 있으며--maxWorkers=1즉, 안에jest.config.js

'use strict';

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

뛰어가다니다

yarn test --maxWorkers=1

시도해 볼 가치가 있을 수 있다.대신에, ts-jest를 포기하고 babel transpilation을 사용하는 것이 가능하다.

다음 두 링크를 읽어 보십시오.

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

여기 고려해야 할 사항들의 목록이 있다.그것들은 당신의 경우에 특정하지는 않지만, 질문의 제목이 꽤 일반적이기 때문에 나는 그들이 방문객의 몇 퍼센트를 도울 수 있다고 생각했다.그들은 맹목적으로 시도되어서는 안 된다. 그들은 단순히 연구의 출발점일 뿐이다.

농담 테스트를 가속화하기 위해 시도할 사항:

  1. 와 함께 watch 모드로 실행--watch

    농담은 당신이 사용할 때 최적화된다.--watch.

  2. 도커에서 실행하지 않고 호스트 컴퓨터에서 실행? -> 나는 이전에 사용했었다.docker exec -it <containername> yarn test호스트를 사용하는 것으로 변경했을 때 더 빨리 찾았어

  3. upgrade jest version 일부 버전을 느리게 만드는 버그가 있었던 것 같다. https://github.com/facebook/jest/pull/8046

    참고: 이다yarn upgrade~와 ^ 버전 표시자를 준수하며, 당신이 무엇을 하고 있는지 알고 있다면, 당신은 단지 제거하고 다시 추가하기를 원할지도 모른다.yarn remove jest yarn add -D jest최신 정보를 얻을 수 있을 겁니다

  4. 테스트 환경을 jsdom에서 노드로 변경

"jest": {
  "testEnvironment": "node"
}
  1. 테스트를 동기식으로 실행하십시오.농담이 최적화되도록 허용하시겠습니까?

덧셈을--runInBand옵션

  1. 최대 작업자를 설정하는 것이 더 빨라질 수 있는가?

덧셈을--maxWorkers=4옵션

나의 경우, 나는 농담 버전을 업그레이드하고 --watch와 --runInBand를 사용하기 시작했으며, 도커를 통해서가 아니라 호스트에서 실행되었고, 나의 시험 시간은 2분에서 10초로 바뀌었다.내 경우에 정확히 어떤 문제가 있었는지 모르겠다.

내 생각에 답은 결국 앵글팀에서 나올 필요가 있을 것 같아.플랫폼BrowserDynamicTesting에 대한 설명서는 희박하다(https://angular.io/api/platform-browser-dynamic/testing/platformBrowserDynamicTesting).

아마도 플랫폼BrowserDynamicTesting은 브라우저를 에뮬레이트하고 응용 프로그램의 전체 DOM을 메모리로 로드할 것이다.이 경우, 거의 10초 동안 각도 애플리케이션(캐슁된 JavaScript 없음)을 사용하는 것이 타당해 보인다.아마도 내가 이것을 잘못 해석하고 있는 것 같지만, 당신의 보고서에 따르면, 실제 테스트는 6밀리초 안에 실행되는 것으로 보이며, 이것은 당신의 "빠른 테스트" 요구 조건을 충족시켜야 할 것 같다.만약 당신이 또 다른 간단한 "빠른 2" 시험을 추가한다면 나는 시험이 얼마나 오래 걸리는지 궁금할 것이다.총계가 여전히 10초 미만인 경우, 이는 실제 테스트가 각도 플랫폼BrowserDynamicTesting 유틸리티의 램프 상승에 비해 거의 시간이 걸리지 않는다는 것을 의미한다.

나는 또한 나의 Angle 프로젝트에 Jest를 사용하지만 그것이 좋은 해결책인지 잘 모르겠다.

테스트 모듈을 구성할 때NO_ERRORS_SCHEMA에 중첩된 모든 구성요소를 추가할 필요는 없음declarations테스트할 구성 요소를 컴파일하십시오.

beforeEach(async () => {
    return TestBed.configureTestingModule({
      declarations: [
        MyComponent
      ],
      schemas: [NO_ERRORS_SCHEMA]
    }).compileComponents();
  });

Jest를 사용한 테스트는 단위 테스트로, 그 솔루션으로 구성 요소만 테스트할 수 있다.성분 간의 상호작용을 테스트하려면 Structor 또는 Puppeteer와 엔드 투 엔드 테스트를 수행하십시오.

나는 전 세계와 같은 농담을 설치하여 같은 문제를 해결했다.

npm install -g jest@26.0

프로젝트와 테스트 사례가 동일한 벤치마크 결과

local - win10 버전 2004 -------------------- node-14.7.0 - 11.847초

글로벌 - win10 버전 2004 ---------------- 노드-14.7.0 - 0.907초

전역 - win10 버전 2004 -- wsl/ubuntu-18.04 -- node-14.7.0 -- 0.469초

농담 테스트 스위트의 느린 실행을 다루는 사람이 있는 경우, 버전을 25개 이상으로 업그레이드하십시오.Jest 버전 24는 느리게 실행된다.

https://jestjs.io/blog/2020/01/21/jest-25#performance-improvements[jest-25#performance-properties][1]

참조URL: https://stackoverflow.com/questions/45087018/jest-simple-tests-are-slow

반응형