javascript - Travis-CI Node 构建随机失败

标签 javascript node.js travis-ci

我有一个问题 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/

相关文章:

javascript - JQuery 追加后隐藏

node.js - 当数据库中不存在行时,Sequelize 总是超时

ruby - psql : could not connect to server error on "travis-ci"

gradle - 在 Travis CI 中构建多模块 gradle 项目

c++ - Travis CI 构建矩阵包含虚假条目?

javascript - Rx combineLatest 等待两个 observable 发出

javascript - triple des 加密 c# 并在 javascript 中解密

javascript - 提取目标之前所有出现的单个单词

node.js - Jade 动态数据

node.js - Mongoose - 填充删除了空引用?