A construção do nó Travis-CI falha aleatoriamente
-
21-12-2019 - |
Pergunta
Eu tenho um problema com um módulo de nó em que todos os testes estão funcionando localmente, em outras caixas e no Travis-CI, mas às vezes, e não devido a um tempo limite, um único teste falha em Travis-CI.O teste é determinístico, pelo menos na minha opinião, então não deve falhar aleatoriamente.
Rastreei o problema até esta parte:
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);
Para o valor de rec_options
ser { dont_print: true, output_objects: true }
, var output_objects
é avaliado (novamente apenas às vezes) como false
portanto, a função gera strings e não objetos nos quais o teste falha corretamente.A prova de que a avaliação da bandeira falha pode ser vista em esta construção que despeja string em vez de objetos (também tenho um teste para garantir que o valor retornado é um objeto sempre que output_objects
é especificado e isso também falha mostrando string
onde object
era esperado).
Na minha opinião isso nunca deveria acontecer e output_objects
não é definido de forma ambígua e certamente não aleatoriamente.E, no entanto, é exatamente isso que acontece repetidas vezes.
O que estou fazendo de errado?
Solução
O problema foi em um dos testes de unidade que não esperava por sua chamada assíncrona para terminar antes de terminar em si.Isso então interferiria, dependendo do tempo, com a execução de outros testes.Isto é muito específico para o módulo de nó em questão ( nock ) à medida que ele zomba de solicitações HTTP / HTTPS eAssim, os testes subseqüentes às vezes capturariam as solicitações assíncricas do teste defeituoso.