我用Angular-CLI构建了Angular2项目(beta 20)。
是否有一种方法仅针对一个选定的规范文件运行测试?
我曾经有一个基于Angular2的项目,我可以手动向jasmine文件添加规格。但我不知道如何在因果测试之外设置这个,也不知道如何用Angular-CLI构建将因果测试限制在特定的文件上。
我用Angular-CLI构建了Angular2项目(beta 20)。
是否有一种方法仅针对一个选定的规范文件运行测试?
我曾经有一个基于Angular2的项目,我可以手动向jasmine文件添加规格。但我不知道如何在因果测试之外设置这个,也不知道如何用Angular-CLI构建将因果测试限制在特定的文件上。
当前回答
这在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”在Webstorm中运行它。
其他回答
这在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”在Webstorm中运行它。
在angular-cli中,你可以运行这个命令,测试只会包含你想要的spec文件。
Ng测试——包括规格文件的路径
配置测试。SRC文件夹中的Ts文件:
const context = require.context('./', true, /\.spec\.ts$/);
替换/ \ .spec \。Ts $/与您想测试的文件名。例如:/app.component\.spec\.ts$/
这将只对app.component.spec.ts运行测试。
如果您在一个使用monorepo架构的项目中工作,那么您必须在命令行中将项目名称写在脚本后。 例如:
ng test MyProject1Name -- --include='myComponent.component.spec.ts'
我自己用grunt解决了这个问题。我有下面的grunt脚本。该脚本所做的是获取要运行的特定测试的命令行参数,并创建test的副本。Ts并把这个特定的测试名称放在那里。
要运行此命令,首先使用以下命令安装grunt-cli:
npm install -g grunt-cli
将以下grunt依赖放在package.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。
Grunt文件如下:
/*
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']);
};