Travis-CI节点构建随机失败

时间:2014-02-25 12:10:22

标签: 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没有明确定义,当然也不是随机定义的。然而,这正是一次又一次发生的事情。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

问题在于其中一个单元测试没有等待其异步调用完成之前完成自身。然后,这将根据时间干扰执行其他测试。这非常特定于所讨论的节点模块(nock),因为它模拟了HTTP / HTTPS请求,因此后续测试有时会捕获来自错误测试的异步请求。