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.ts
java.
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)
파일 자체입니다.
약간의 변화만 있으면 됩니다.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
'code' 카테고리의 다른 글
postgresql에서 함수, 프로시저, 트리거 소스 코드를 표시하는 방법은 무엇입니까? (0) | 2023.05.03 |
---|---|
이클립스에서 이 원치 않는 바를 제거하려면 어떻게 해야 합니까? (0) | 2023.05.03 |
어셈블리 '마이크로소프트'.SqlServer.유형의 버전 10 이상을 찾을 수 없습니다. (0) | 2023.05.03 |
루프가 종료된 후 변수를 루프하고 보존하는 동안 Bash에 입력을 파이프로 연결하는 방법 (0) | 2023.05.03 |
초기화 문자열의 형식이 인덱스 0에서 시작하는 규격과 맞지 않습니다. (0) | 2023.05.03 |