code

Angular-cli를 사용하여 하나의 검정 규격만 실행하는 방법

starcafe 2023. 5. 3. 21:36
반응형

Angular-cli를 사용하여 하나의 검정 규격만 실행하는 방법

Angular-CLI(베타 20)를 사용한 Angular2 프로젝트 빌드가 있습니다.

선택한 하나의 사양 파일에 대해서만 테스트를 실행할 수 있는 방법이 있습니까?

저는 Angular2 빠른 시작에 기반한 프로젝트를 가지고 있었고, 수동으로 자스민 파일에 스펙을 추가할 수 있었습니다.하지만 카르마 테스트 외에 이것을 설정하는 방법이나 Angular-CLI 빌드가 있는 특정 파일로 카르마 테스트를 제한하는 방법을 모르겠습니다.

의 각사의자..spec.ts의 모든 는 파에모테그있습룹다니어되화가일로 .describe다음과 같은 차단:

describe('SomeComponent', () => {...}

이 단일 블록만 쉽게 실행할 수 있습니다. 다음과 같이 접두사를 붙입니다.describe에 함이가 있는 경우:f:

fdescribe('SomeComponent', () => {...}

만약 당신이 그런 기능을 가지고 있다면, 다른 것은 없습니다.describe블록이 실행됩니다.그나저나, 당신은 비슷한 것을 할 수 있습니다.it=>fit그리고 "해킹" 버전도 있습니다.x그래서:

  • fdescribe그리고.fit이 방법으로 표시된 함수만 실행되도록 합니다.
  • xdescribe그리고.xit이 방식으로 표시된 기능을 제외한 모든 기능이 실행되도록 합니다.

를 구성합니다.test.ts줄을 지어 안으로 들어가다src폴더:

const context = require.context('./', true, /\.spec\.ts$/);

를 바꿉니다./\.spec\.ts$/테스트할 파일 이름을 지정합니다. 예:/app.component\.spec\.ts$/

테스트는 다음 기간 동안만 실행됩니다.app.component.spec.ts.

Angular CLI를 사용하여 특정 파일만 테스트할 수 있습니다(ng명령) 다음과 같이 입력합니다.

ng test --main ./path/to/test.ts

추가 문서는 https://angular.io/cli/test 에 있습니다.

독립 실행형 라이브러리 파일에서는 작동하지만 각 구성 요소/서비스 등에서는 작동하지 않습니다.각되어 있기 때문입니다(즉, 즉파일다른파이각일이는,src/test.ts각도 7).슬프게도--main플래그는 다중 인수를 사용하지 않습니다.

모든 경우에 효과가 있었습니다.

ng test --include='**/dealer.service.spec.ts'

그러나 나는 보통 다음과 같은 이유로 "TypeError: null의 속성 'ngModule'을 읽을 수 없습니다"를 받았습니다.

ng test --main src/app/services/dealer.service.spec.ts

@angular/cli 10.0.4 버전

사용하다--include

와 함께 하는 일입니다.--include

ng test --include src/app/path-to-component/path-component.component.spec.ts

나는 노력했다.--main그렇지 않은 동안 모든 실패 결과가 표시됩니다.생각합니다--main메인을 바꿀 것입니다.test.tsjava.

bash 터미널에서 나는 이중 대시를 사용하는 것을 좋아합니다.VS Code를 사용하면 탐색기에서 사양 파일을 마우스 오른쪽 버튼으로 클릭하거나 열려 있는 탭을 클릭할 수 있습니다.그런 다음 '상대 경로 복사'를 선택합니다.아래 명령을 실행하여 클립보드에서 상대 경로를 붙여 넣습니다.

npm t -- --include relative/path/to/file.spec.ts

이중 대시는 다음에 대한 명령 옵션의 종료를 나타냅니다.npm t그리고 그 이후의 모든 것을 다음 명령으로 전달합니다.ng t수정할 필요가 없으며 원하는 결과를 신속하게 제공합니다.

명령줄에서 선택한 파일을 제어할 수 있도록 하려면 Angular 7에 대해 이 작업을 수행했습니다.

은 설치할 가 있습니다.@angular-devkit/build-angular:browser그런 다음 사용자 지정 웹 팩 플러그인을 만들어 테스트 파일 regex를 통과시킵니다.예:

angular.json - 테스트 작성기 변경@angular-devkit/build-angular:browser사용자 지정 구성 파일을 설정합니다.

...

        "test": {
          "builder": "@angular-builders/custom-webpack:browser",
          "options": {
            "customWebpackConfig": {
              "path": "./extra-webpack.config.js"
            },
...

extra-webpack.config.js - 명령줄에서 regex를 읽는 웹 팩 구성을 만듭니다.

const webpack = require('webpack');
const FILTER = process.env.KARMA_FILTER;
let KARMA_SPEC_FILTER = '/.spec.ts$/';
if (FILTER) {
  KARMA_SPEC_FILTER = `/${FILTER}.spec.ts$/`;
}
module.exports = {
  plugins: [new webpack.DefinePlugin({KARMA_SPEC_FILTER})]
}

test.ts - 규격 편집

...
// Then we find all the tests.
declare const KARMA_CONTEXT_SPEC: any;
const context = require.context('./', true, KARMA_CONTEXT_SPEC);

그런 다음 다음을 사용하여 기본값을 재정의합니다.

KARMA_FILTER='somefile-.*\.spec\.ts$' npm run test

저는 여기에 뒷이야기를 기록했습니다. 유형 및 잘못된 링크에 대해 미리 사과드립니다.@Aish-Anu가 나를 올바른 방향으로 인도한 것에 대해 위의 답변을 신뢰합니다.

간단한 방법은 설명모든 내용을 f로 시작하는 것입니다.

fdescribe('testecomponente', () => {
  fit('should create', () => {
    //your code 
  }
  
}
  

이것은 Angular 7에서 저에게 효과가 있습니다.ng 명령의 --main 옵션을 기반으로 합니다.이 옵션이 문서화되어 있지 않고 변경될 수 있는지는 잘 모르겠지만 저에게는 효과가 있습니다.저는 제 소포에 줄을 넣었습니다.스크립트 섹션의 json 파일.여기서 ng test 명령어와 함께 --main 옵션을 사용하여 실행할 .spec.ts 파일의 경로를 지정합니다.예를들면

"test 1": "ng test --main E:/WebRxAngularClient/src/app/test/shared/my-date-utils.spec.ts",

이러한 스크립트를 실행할 때 스크립트를 실행할 수 있습니다.저는 npm 섹션의 "test 1"을 클릭하여 웹스톰에서 실행합니다.

나는 투덜거림을 이용해 이 문제를 스스로 해결했습니다.나는 아래의 그룬트 스크립트를 가지고 있습니다.스크립트가 수행하는 작업은 실행할 특정 테스트의 명령줄 매개 변수를 가져와 test.ts의 복사본을 만들고 이 특정 테스트 이름을 여기에 넣습니다.

이를 실행하려면 먼저 다음을 사용하여 grunt-cli를 설치합니다.

npm install -g grunt-cli

아래의 그룬트 종속성을 패키지에 넣습니다.json:

"grunt": "^1.0.1",
"grunt-contrib-clean": "^1.0.0",
"grunt-contrib-copy": "^1.0.0",
"grunt-exec": "^2.0.0",
"grunt-string-replace": "^1.3.1"

이를 실행하려면 아래의 grunt 파일을 루트 폴더에 Gruntfile.js로 저장합니다.그런 다음 명령줄에서 다음과 같이 실행합니다.

grunt --target=app.component

이렇게 하면 app.component.spec.ts가 실행됩니다.

그룬트 파일은 다음과 같습니다.

/*
This gruntfile is used to run a specific test in watch mode. Example: To run app.component.spec.ts , the Command is: 
grunt --target=app.component
Do not specific .spec.ts. If no target is specified it will run all tests.
*/
module.exports = function(grunt) {
var target = grunt.option('target') || '';
  // Project configuration.
  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),
    clean: ['temp.conf.js','src/temp-test.ts'],
    copy: {
      main: {
        files: [
             {expand: false, cwd: '.', src: ['karma.conf.js'], dest: 'temp.conf.js'},
             {expand: false, cwd: '.', src: ['src/test.ts'], dest: 'src/temp-test.ts'}
             ],
      }
    },
    'string-replace': {
          dist: {
            files: {
              'temp.conf.js': 'temp.conf.js',
              'src/temp-test.ts': 'src/temp-test.ts'
            },
            options: {
              replacements: [{
                pattern: /test.ts/ig,
                replacement: 'temp-test.ts'
              },
              {
                pattern: /const context =.*/ig,
                replacement: 'const context = require.context(\'./\', true, /'+target+'\\\.spec\\\.ts$/);'
              }]
            }
        }
    },
    'exec': {
        sleep: {
          //The sleep command is needed here, else webpack compile fails since it seems like the files in the previous step were touched too recently
          command: 'ping 127.0.0.1 -n 4 > nul',
          stdout: true,
          stderr: true
        },
        ng_test: {
          command: 'ng test --config=temp.conf.js',
          stdout: true,
          stderr: true
        }
    }
  });

  // Load the plugin that provides the "uglify" task.
    grunt.loadNpmTasks('grunt-contrib-clean');
    grunt.loadNpmTasks('grunt-contrib-copy');
    grunt.loadNpmTasks('grunt-string-replace');
    grunt.loadNpmTasks('grunt-exec');
  // Default task(s).
  grunt.registerTask('default', ['clean','copy','string-replace','exec']);

};

여기에 저처럼 Angular에서 단일 사양을 실행하는 방법을 찾다가 이 SO를 발견한 사람들을 위해 추가합니다.

docs ( 당시)에 , 최Angular 문작 (서성당시에 v9.0.6) 따르면,ng test에는 명가있다가 .--include할 수 은 " " " " 입니다.*.spec.(ts|tsx)만 사용할 수 있습니다..spec.(ts|tsx)파일 자체입니다.

https://angular.io/cli/test

약간의 변화만 있으면 됩니다.test.ts폴더 내부의 :src 파일:

const context = require.context('./', true, /test-example\.spec\.ts$/);

여기서,test-example가 실행해야입니다.

마찬가지로 서비스 파일만 테스트해야 하는 경우 "/test-example.service"와 같은 파일 이름을 바꿀 수 있습니다.

JetBrain WebStorm 사용자 전용

없어요.ng전체적으로 설치되어 실행할 수 없음ng test ...명령행에서.그리고 기존 코드베이스의 Angular 버전과 충돌할 수 있기 때문에 설치할 수 없습니다.저는 JetBrains WebStorm IDE를 사용하고 있으며 그 안에서 사양 파일을 마우스 오른쪽 버튼으로 클릭하여 테스트를 실행할 수 있습니다.

여기에 이미지 설명 입력

일종의 확장으로 쉬운 방법을 찾고 있는 저와 같은 사람들을 위해 이 대답을 추가합니다.

나처럼 VS 코드를 사용하면 간단하게 설치할 수 있습니다.Jest Runner하나의 테스트 사례를 쉽게 실행/디버깅할 수 있습니다.

모노레포 아키텍처를 사용하는 프로젝트에서 작업하는 경우 명령줄에 스크립트 뒤에 프로젝트 이름을 입력해야 합니다.예:

ng test MyProject1Name -- --include='myComponent.component.spec.ts'

angular-cli에서 이 명령을 실행할 수 있으며 테스트에는 원하는 사양 파일만 포함됩니다.

ng test --규격 파일의 경로를 지정합니다.

언급URL : https://stackoverflow.com/questions/40683673/how-to-execute-only-one-test-spec-with-angular-cli

반응형