我有一个问题 node module所有测试都在本地、其他盒子和 Travis-CI 上运行,但有时,不是由于超时,一个测试在 Travis-CI 上失败。 。至少在我看来,测试是确定性的,所以它不应该随机失败。
我已将问题追溯到这部分:
function record(rec_options) {
// Originaly the parameter was a dont_print boolean flag.
// To keep the existing code compatible we take that case into account.
var typeof_rec_options = typeof(rec_options);
var dont_print = (typeof_rec_options === 'boolean' && rec_options)
|| (typeof_rec_options === 'object' && rec_options.dont_print);
var output_objects = typeof_rec_options === 'object' && rec_options.output_objects;
...
var out = !output_objects ?
generateRequestAndResponse(body, options, res, datas) :
generateRequestAndResponseObject(body, options, res, datas);
对于 rec_options
的值为 { dont_print: true, output_objects: true }
,var output_objects
被评估(同样只有 有时)为false
,因此该函数输出字符串,而不是测试正确失败的对象。标志评估失败的证明可以在 this build 中看到它转储字符串而不是对象(我还进行了一个测试,以确保每当指定 output_objects
时返回的值都是一个对象,并且也会失败显示 string
其中 >object
是预期的)。
根据我的说法,这种情况永远不会发生,并且 output_objects
的定义不是含糊的,当然也不是随机的。然而,这正是一次又一次发生的事情。
我做错了什么?
最佳答案
问题出在一个单元测试中,该测试没有等待其异步调用在完成之前完成。然后,根据时间安排,这会干扰其他测试的执行。这对于有问题的 Node 模块 ( nock ) 来说是非常具体的,因为它模拟 HTTP/HTTPS 请求,因此后续测试有时会捕获来自错误测试的异步请求。
关于javascript - Travis-CI Node 构建随机失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22013806/