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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top