将检查所有文件格式正确的测试添加到 Karma \ Travis
Add test that checks all files are formatted correctly to Karma \ Travis
我在本地使用 karma 为我的一个项目实施一些测试,而 Travis github 测试集成(你不能合并拉取请求,除非所有测试通过)
我真的很想对代码格式化做同样的事情。
我正在使用 jscs 和 gulp 来检查代码。
我考虑过为 Travis 添加一个测试,以便在 PR 格式不正确时使测试失败。
有标准的方法吗?
目前,我考虑了两种选择:向我的测试套件添加一个测试以检查格式。如果返回任何错误,则使测试失败。另一种选择是 运行 Travis 上的任务,但我无法使 Travis 构建在 lint 上失败任务。
我看到有一个 karma 预处理器,但据我所知,如果发现任何 jscs 错误,它不会使 travis 失败。
有什么更好的做法吗?
我在互联网上找不到任何东西,因为 <TEST_FRAMEWORK> test file formatting
只有 returns 很多关于如何正确格式化测试(可读性)的结果
我使用 Grunt or Gulp 来 运行 我所有的 JavaScript 任务。他们都做同样的事情,但在外观和感觉上却大不相同。我不是他们中任何一个的专家,所以请对我所说的持保留态度。我没有使用 Travis 的经验,但我目前在我的一个 Jenkins 构建中使用 G运行t。
如果您使用 Karma,我假设您熟悉 NodeJS 和 npm。
我会给你一个使用 G运行t 的例子来说明我认为你正在尝试做的事情。
- 为了在任何地方使用 G运行t,您需要全局安装它:
npm install -g grunt-cli
.
- 为了在 Karma 中使用 G运行t,您需要安装
grunt-karma
。在项目的根目录中:npm install --save-dev grunt-karma
。此示例不包括业力配置,因为您可以在没有它的情况下做您想做的事。
- 要检查您当前正在使用 jscs 的项目文件。为此也有一个 G运行t 插件:grunt-jscs。但是,我熟悉 jshint,因此我将在本示例中使用它。在项目的根目录中:
npm install --save-dev grunt-contrib-jshint
.
下面是一个示例 Gruntfile.js
,它也应该位于项目的根目录中。
module.exports = function(grunt) {
// Project configuration.
grunt.initConfig({
// Task configuration.
jshint: {
options: {
devel: true,
curly: true,
eqeqeq: false,
immed: true,
latedef: false,
newcap: true,
noarg: true,
sub: true,
undef: true,
unused: true,
boss: true,
eqnull: true,
browser: true,
globals: {
jQuery: true,
angular: true
}
},
gruntfile: {
src: 'Gruntfile.js'
},
lib_test: {
src: ['src/app/**/*.js', '!src/app/libs/**/*.js']
}
}
});
// These plugins provide necessary tasks.
grunt.loadNpmTasks('grunt-contrib-jshint');
// Default task.
grunt.registerTask('test', ['jshint']);
};
要从命令行执行 运行 任务,请转到您的 Gruntfile.js
所在的目录和 运行 grunt test
。我不确定这是否适用于 Travis,但在 Jenkins 中,如果 JSHint 发现错误,构建将失败。如果使用 --force
选项可以绕过此问题:grunt --force test
.
jshint 任务配置下的 lib_test
包括您要 lint 的文件。确保它们与你的 G运行tfile 所在的位置相关,它应该在项目的根目录中。
G运行t 和 Gulp 可以做得更多。如果你真的想进入 JavaScript 任务自动化,我建议学习 Gulp。不过,我认为这应该是一个很好的 short-term 解决方案。
因为看起来没有任何标准的方法可以做到这一点,我将列出两个选择来做这样的事情:
在一切之前
你需要让你 gulp/grunt 任务 return 成为 non-zero 才能失败。如果任务失败,Travis 会将其视为构建失败,这将表明 PR 的测试失败。
在gulp和jscs中,我是这样做的:
gulp.task('lint-js', function() {
return gulp.src(FILES.JS_ALL)
.pipe(cache('linting'))
.pipe(jscs())
.pipe(jscs.reporter())
.pipe(jscs.reporter('fail'));
});
大多数 linters 都有一个记者。如果你在末尾输入 .reporter('fail')
,如果你的 linter return 出现任何 lint 错误,它将 return 一个 non-zero。 =18=]
对于G运行t,@Nocomm回答,貌似g运行t自动returns a non-zero 如果发现任何 lint 错误。
1) 如果文件未格式化,您的测试任务会失败
您可以将 lint
任务添加为 test
任务的依赖项。如果你这样添加:
gulp.task('test', ['lint-js'], function() {//...
当 Travis 开始 运行 测试时,它会首先检查所有文件的格式是否正确。如果不是,Travis 会将 non-zero return 视为失败并正确报告 GitHub
2) 将您的 gulp lint 任务添加到 Travis 的 before_script
既然您的 lint 任务因 lint 警告而失败,您可以在 运行 测试之前将该任务添加到 .travis.yml
before_script
运行 命令列表。
只需将它添加到列表的末尾,以便在测试之前 运行 它(为什么 运行 测试一个 PR 会因为格式化而失败?),并且在你安装所有需要的东西之后到运行这样的任务。
来自 Travis 日志文件:
我在本地使用 karma 为我的一个项目实施一些测试,而 Travis github 测试集成(你不能合并拉取请求,除非所有测试通过)
我真的很想对代码格式化做同样的事情。 我正在使用 jscs 和 gulp 来检查代码。
我考虑过为 Travis 添加一个测试,以便在 PR 格式不正确时使测试失败。
有标准的方法吗? 目前,我考虑了两种选择:向我的测试套件添加一个测试以检查格式。如果返回任何错误,则使测试失败。另一种选择是 运行 Travis 上的任务,但我无法使 Travis 构建在 lint 上失败任务。
我看到有一个 karma 预处理器,但据我所知,如果发现任何 jscs 错误,它不会使 travis 失败。
有什么更好的做法吗?
我在互联网上找不到任何东西,因为 <TEST_FRAMEWORK> test file formatting
只有 returns 很多关于如何正确格式化测试(可读性)的结果
我使用 Grunt or Gulp 来 运行 我所有的 JavaScript 任务。他们都做同样的事情,但在外观和感觉上却大不相同。我不是他们中任何一个的专家,所以请对我所说的持保留态度。我没有使用 Travis 的经验,但我目前在我的一个 Jenkins 构建中使用 G运行t。
如果您使用 Karma,我假设您熟悉 NodeJS 和 npm。
我会给你一个使用 G运行t 的例子来说明我认为你正在尝试做的事情。
- 为了在任何地方使用 G运行t,您需要全局安装它:
npm install -g grunt-cli
. - 为了在 Karma 中使用 G运行t,您需要安装
grunt-karma
。在项目的根目录中:npm install --save-dev grunt-karma
。此示例不包括业力配置,因为您可以在没有它的情况下做您想做的事。 - 要检查您当前正在使用 jscs 的项目文件。为此也有一个 G运行t 插件:grunt-jscs。但是,我熟悉 jshint,因此我将在本示例中使用它。在项目的根目录中:
npm install --save-dev grunt-contrib-jshint
.
下面是一个示例 Gruntfile.js
,它也应该位于项目的根目录中。
module.exports = function(grunt) {
// Project configuration.
grunt.initConfig({
// Task configuration.
jshint: {
options: {
devel: true,
curly: true,
eqeqeq: false,
immed: true,
latedef: false,
newcap: true,
noarg: true,
sub: true,
undef: true,
unused: true,
boss: true,
eqnull: true,
browser: true,
globals: {
jQuery: true,
angular: true
}
},
gruntfile: {
src: 'Gruntfile.js'
},
lib_test: {
src: ['src/app/**/*.js', '!src/app/libs/**/*.js']
}
}
});
// These plugins provide necessary tasks.
grunt.loadNpmTasks('grunt-contrib-jshint');
// Default task.
grunt.registerTask('test', ['jshint']);
};
要从命令行执行 运行 任务,请转到您的 Gruntfile.js
所在的目录和 运行 grunt test
。我不确定这是否适用于 Travis,但在 Jenkins 中,如果 JSHint 发现错误,构建将失败。如果使用 --force
选项可以绕过此问题:grunt --force test
.
lib_test
包括您要 lint 的文件。确保它们与你的 G运行tfile 所在的位置相关,它应该在项目的根目录中。
G运行t 和 Gulp 可以做得更多。如果你真的想进入 JavaScript 任务自动化,我建议学习 Gulp。不过,我认为这应该是一个很好的 short-term 解决方案。
因为看起来没有任何标准的方法可以做到这一点,我将列出两个选择来做这样的事情:
在一切之前
你需要让你 gulp/grunt 任务 return 成为 non-zero 才能失败。如果任务失败,Travis 会将其视为构建失败,这将表明 PR 的测试失败。 在gulp和jscs中,我是这样做的:
gulp.task('lint-js', function() {
return gulp.src(FILES.JS_ALL)
.pipe(cache('linting'))
.pipe(jscs())
.pipe(jscs.reporter())
.pipe(jscs.reporter('fail'));
});
大多数 linters 都有一个记者。如果你在末尾输入 .reporter('fail')
,如果你的 linter return 出现任何 lint 错误,它将 return 一个 non-zero。 =18=]
对于G运行t,@Nocomm回答,貌似g运行t自动returns a non-zero 如果发现任何 lint 错误。
1) 如果文件未格式化,您的测试任务会失败
您可以将 lint
任务添加为 test
任务的依赖项。如果你这样添加:
gulp.task('test', ['lint-js'], function() {//...
当 Travis 开始 运行 测试时,它会首先检查所有文件的格式是否正确。如果不是,Travis 会将 non-zero return 视为失败并正确报告 GitHub
2) 将您的 gulp lint 任务添加到 Travis 的 before_script
既然您的 lint 任务因 lint 警告而失败,您可以在 运行 测试之前将该任务添加到 .travis.yml
before_script
运行 命令列表。
只需将它添加到列表的末尾,以便在测试之前 运行 它(为什么 运行 测试一个 PR 会因为格式化而失败?),并且在你安装所有需要的东西之后到运行这样的任务。
来自 Travis 日志文件: