gpt4 book ai didi

javascript - 当测试失败时,TravisCI 不会让我的构建失败

转载 作者:搜寻专家 更新时间:2023-10-31 22:48:01 26 4
gpt4 key购买 nike

我有用 JavaScript 编写的测试,我使用 TravisCI用于测试。

设置

我的 package.json 是这样的:

"scripts": {
"test": "node testsRunner.js"
}

我的 .travis.yml 是:

language: node_js
node_js:
- '0.12.7'

'testsRunner.js' 是:

var nodeunit = require('nodeunit');
var path = require('path');

nodeunit.reporters.default.run([
path.join(__dirname, 'suite1/test.js')
]);

suite1/test.js 最后是:

module.exports = {
setUp: function(callback) {
// Initialization code...
callback();
},

tearDown: function(callback) {
// Cleanup...
callback();
},

test1: function(test) {
test.expect(10); // This test expects 10 assertions to be run
// Doing stuff...
test.done();
},

test2: function(test) {
test.expect(10); // This test expects 20 assertions to be run
// Doing stuff...
test.done();
}
};

Travis 日志

这是来自 Travis 的构建日志和测试执行:

Using worker: worker-linux-docker-19fc8ef0.prod.travis-ci.org:travis-linux-6
system_info
Build system information
Build language: node_js
Build image provisioning date and time
Thu Feb 5 15:09:33 UTC 2015
Operating System Details
Distributor ID: Ubuntu
Description: Ubuntu 12.04.5 LTS
Release: 12.04
Codename: precise
Linux Version
3.13.0-29-generic
Cookbooks Version
a68419e https://github.com/travis-ci/travis-cookbooks/tree/a68419e
GCC version
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
LLVM version
clang version 3.4 (tags/RELEASE_34/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix
Pre-installed Ruby versions
ruby-1.9.3-p551
Pre-installed Node.js versions
v0.10.36
Pre-installed Go versions
1.4.1
Redis version
redis-server 2.8.19
riak version
2.0.2
MongoDB version
MongoDB 2.4.12
CouchDB version
couchdb 1.6.1
Neo4j version
1.9.4
RabbitMQ Version
3.4.3
ElasticSearch version
1.4.0
Installed Sphinx versions
2.0.10
2.1.9
2.2.6
Default Sphinx version
2.2.6
Installed Firefox version
firefox 31.0esr
PhantomJS version
1.9.8
ant -version
Apache Ant(TM) version 1.8.2 compiled on December 3 2011
mvn -version
Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-14T17:29:23+00:00)
Maven home: /usr/local/maven
Java version: 1.7.0_76, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-7-oracle/jre
Default locale: en_US, platform encoding: ANSI_X3.4-1968
OS name: "linux", version: "3.13.0-29-generic", arch: "amd64", family: "unix"
git.checkout
0.61s$ git clone --depth=50 --branch=master git://github.com/myuser/myproj.git myuser/myproj
Cloning into 'myuser/myproj'...
remote: Counting objects: 1473, done.
remote: Compressing objects: 100% (1053/1053), done.
remote: Total 1473 (delta 300), reused 1401 (delta 250), pack-reused 0
Receiving objects: 100% (1473/1473), 8.93 MiB | 0 bytes/s, done.
Resolving deltas: 100% (300/300), done.
Checking connectivity... done.
$ cd myuser/myproj
$ git checkout -qf d603836a30ea1bc213f7b97682df507c91af8404
This job is running on container-based infrastructure, which does not allow use of 'sudo', setuid and setguid executables.
If you require sudo, add 'sudo: required' to your .travis.yml
See http://docs.travis-ci.com/user/workers/container-based-infrastructure/ for details.
2.99s$ nvm install 0.12.7
######################################################################## 100.0%
Now using node v0.12.7
$ node --version
v0.12.7
$ npm --version
2.11.3
$ nvm --version
0.23.3
install
0.84s$ npm install
npm WARN package.json myproj@0.1.0 No license field.
0.64s$ npm test
> myproj@0.1.0 test /home/travis/build/myuser/myproj
> node testsRunner.js
test.js
✔ test1
✖ test2
TypeError: Cannot read property...
at extract (...)
at Object.at (...)
at Object.module.exports...
... <stacktrace continues>

FAILURES: 1/45 assertions failed (19ms)
The command "npm test" exited with 0.
Done. Your build exited with 0.

问题

问题是 test1 成功而 test2 没有通过。在 test2 抛出异常之前,Travis 将我的构建报告为失败。

但是现在我修复了测试,所以 test2 不会抛出异常,但它的断言会失败。然而,Travis 将该构建报告为通过,而它应该将其报告为失败构建。

如何处理?

编辑

我已经像这样改变了我的运行者:

var nodeunit = require('nodeunit');
var path = require('path');

nodeunit.reporters.default.run([
path.join(__dirname, 'suite1/test.js')
]);
console.log('Done!'); // ADDED THIS LINE

好吧,在日志中我可以看到 Done! 显示在一切之前,之后我可以看到每个单独的测试日志和堆栈跟踪。这些测试是否可能正在执行异步,这会导致主进程以 0 状态退出?

固定

按照 Chris Beck 的建议,我将运行者改成了这样:

var nodeunit = require('nodeunit');
var path = require('path');

nodeunit.reporters.default.run([
path.join(__dirname, 'suite1/test.js')
], null function(data) {
// `data` has a value if errors occurred
if (data) { throw 'Error1'; }
});

最佳答案

我使用 travis-ci 进行单元测试。

如果您希望测试失败代表构建失败,调用测试的命令行实用程序需要报告非零错误代码结果(如 bash 值 $? 中可见)运行测试后。)

如果您的 js 环境不会导致 assert 失败,那么最简单的事情很可能是编写您自己的 assert 函数,它会抛出一个未捕获的异常,或者,它设置一个全局变量来指示失败,并且在您存在之前测试运行器脚本检查全局变量并在设置时抛出未捕获的异常。

(后者的优点是,即使某些断言失败,您也可以运行所有测试,但缺点是,如果测试无限循环,那么即使在较早的断言失败后,您的构建也会停顿一段时间。)

关于javascript - 当测试失败时,TravisCI 不会让我的构建失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32418722/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com