Travis-CI节点随机构build失败

我有一个节点模块的问题,其中所有的testing在本地,在其他盒子上和Travis-CI上工作,但有时候,而不是由于超时, Travis-CI上的一个testing失败。 testing是确定性的,至less根据我的说法,所以它不应该随机失败。

我已经将问题追溯到这个部分:

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所以函数输出string,而不是testing正确失败的对象。 标志评估失败的证据可以在这个构build中看到, 这个构造抛出了string,而不是对象(我也有一个testing,以确保返回的值是一个对象,只要output_objects被指定,并且不能显示string , )。

据我output_objects这不应该发生, output_objects没有明确的定义,当然也不是随机的。 然而这正是一次又一次发生的事情。

我究竟做错了什么?

问题出在其中一个unit testing中,在完成之前并没有等待其asynchronous调用完成。 然后根据时间的不同,执行其他testing。 这对于所讨论的节点模块( nock )非常具体,因为它会嘲笑HTTP / HTTPS请求,因此后续testing有时会从错误testing中捕获asynchronous请求。