Mocha: tempo limite de 2.000 ms excedido. Certifique-se de que o retorno de chamada done () esteja sendo chamado neste teste.

Criado em 26 dez. 2015  ·  19Comentários  ·  Fonte: mochajs/mocha

Estou recebendo o seguinte erro ao executar todo o conjunto de testes:

timeout of 2000ms exceeded. Ensure the done() callback is being called in this test.

Achei esta resposta super útil no StackOverflow http://stackoverflow.com/questions/16607039/in-mocha-testing-while-calling-asynchronous-function-how-to-avoid-the-timeout-er# e aqui https: //github.com/mochajs/mocha/pull/278

No entanto, o problema ainda persiste mesmo depois de excluir todas as ocorrências em meus testes que lidam com HTTP e promessas. Tudo o que tenho agora são a diretiva Angular e as especificações do controlador, que não parecem fazer muito mais do que verificar os dados do template, a diretiva e a lógica do controlador.

Alguém sabe por que isso ainda está acontecendo e se há uma maneira melhor de saber exatamente qual é o problema? obrigado!

Comentários muito úteis

basta adicionar em seu package.json em scripts

       "scripts": {
            "start": "SET NODE_ENV=dev && node ./bin/www",
            "devstart": "SET NODE_ENV=dev && nodemon ./bin/www",
            "test": "mocha --timeout 10000"  <= increase this from 1000 to 10000
        },

Então você pode apenas correr

      npm test

Todos 19 comentários

@gumatias para

obrigado pelo feedback @boneskull !

Existem cerca de 700 especificações no momento e são todos códigos proprietários. Posso fornecer um de dois exemplos semelhantes, isso seria útil?

Abaixo está o que tenho atualmente em package.json. Atualizar bibliotecas como mocha e karma-mocha não pareceu ajudar.

"devDependencies": {
  "karma": "~0.12.30",
  "karma-chai-jquery": "~1.0.0",
  "karma-chrome-launcher": "~0.1",
  "karma-coffee-preprocessor": "~0.1.3",
  "karma-firefox-launcher": "~0.1",
  "karma-jquery": "~0.1.0",
  "karma-mocha": "0.2.0",
  "karma-sinon-chai": "~0.1.1",
  "karma-spec-reporter": "~0.0.10",
  "mocha": "^2.2.5"
}

Abaixo estão algumas das minhas tentativas de chegar a um estado em que os tempos limite parariam de ocorrer (sem sucesso).

1. Chamado done() dentro e após cada promessa e chamadas assíncronas em testes

2. Removidas todas as especificações que lidam com chamadas assíncronas, promessas, httpBackend e tempo limite (apenas no caso)

3. Atualizou a maioria das bibliotecas em package.json :

"devDependencies": {
  "karma": "~0.12.30",
  "karma-chai-jquery": "1.0.0",
  "karma-chrome-launcher": "0.2.2",
  "karma-coffee-preprocessor": "0.3.0",
  "karma-firefox-launcher": "~0.1",
  "karma-jquery": "0.1.0",
  "karma-mocha": "0.2.1",
  "karma-sinon-chai": "1.1.0",
  "karma-spec-reporter": "0.0.23",
  "mocha": "2.3.4"
}

4. Removidas as especificações de que o relator de especificações de carma estava reclamando de lentidão:
por exemplo, Chrome 39.0.2171 (Mac OS X 10.11.2) SLOW 2.457 secs: My Spec Name "before each" hook for "should display " Add My Spec" when doing something"

Descobri que outras especificações novas reclamavam da lentidão. Isso provavelmente pode levar à exclusão de especificações sem realmente encontrar a causa raiz.

Fechando esta questão. Era um problema de vazamento de memória descrito aqui https://github.com/mochajs/mocha/issues/2030

Timeouts específicos de teste também podem ser aplicados, ou o uso de this.timeout (0) para desabilitar todos os tempos limite:

 it('should take less than 500ms', function(done){
  this.timeout(500);
  setTimeout(done, 300);
});

fonte: https://mochajs.org/#timeouts

Se você estiver usando Ember, tente empacotar chamadas assíncronas em Ember.run => leia isto

Eu tive o mesmo problema, e Ember.run => consertou.

Além disso, lembre-se de que a seta deve ser uma seta grande (cometi esse erro uma vez ao usar -> em vez de =>) é por causa do escopo do javascript, leia se estiver interessado.

link stackoverflow

Estou conseguindo
Erro: Tempo limite de 2.000 ms excedido. Para testes assíncronos e ganchos, certifique-se de que "done ()" seja chamado; se retornar uma promessa, certifique-se de que resolve.
Como consertar isto?
Meu código é:

describe("Test Search", function() {
    it("Test Post Request", function(done) {
            chai.request(postReqURL)
            .post(postReqURL)
            .send(postReqObject)
            .end(function (err, res) {
                if (err) done(err);
                expect(res.status).to.equal(200);
                done()
            })
       });
});

Olá @ vishnu2prasadh , você tentou aumentar o tempo limite para mais tempo do que a API HTTP leva para responder? O uso do seu teste de done parece estar correto.

@ScottFreeCode obrigado. Erro resolvido adicionando this.timeout (10000); dentro

it("Test Post Request", function(done) {
     this.timeout(10000);
});

basta adicionar em seu package.json em scripts

       "scripts": {
            "start": "SET NODE_ENV=dev && node ./bin/www",
            "devstart": "SET NODE_ENV=dev && nodemon ./bin/www",
            "test": "mocha --timeout 10000"  <= increase this from 1000 to 10000
        },

Então você pode apenas correr

      npm test

@elvinaze existe uma maneira de aumentar os limites de tempo limite no bloco beforeEach?

basta adicionar em seu package.json em scripts

       "scripts": {
            "start": "SET NODE_ENV=dev && node ./bin/www",
            "devstart": "SET NODE_ENV=dev && nodemon ./bin/www",
            "test": "mocha --timeout 10000"  <= increase this from 1000 to 10000
        },

Então você pode apenas correr

      npm test

a resposta mais útil até agora 👍

basta adicionar em seu package.json em scripts

       "scripts": {
            "start": "SET NODE_ENV=dev && node ./bin/www",
            "devstart": "SET NODE_ENV=dev && nodemon ./bin/www",
            "test": "mocha --timeout 10000"  <= increase this from 1000 to 10000
        },

Então você pode apenas correr

      npm test

ainda para mim porque .Error: Timeout de 10000ms excedido. Para testes assíncronos e ganchos, certifique-se de que "done ()" seja chamado; se retornar uma promessa, certifique-se de que resolve

it ('deve acessar o módulo do usuário', função (feito) {
any_asynchfunction ()
Experimente{
assert.strictEqual (verificar, verdadeiro, 'o usuário administrador tem acesso ao módulo do usuário');
feito();
} catch (errar) {
feito (errar);
}
});
});

var any_asynchfunction = function () {
var diferido = q.defer ();
// Chamar função assíncrona como: chamada de API (http://api.domain.com)
deferred.resolve (res);
return deferred.promise;
}

Teste de código assíncrono com Mocha usando retornos de chamada e promessas

@ ashish101184 , não adicione comentários a questões fechadas não relacionadas!

Seu problema foi explicado na documentação .

it('should access user module', function() {
  return any_asynchfunction()
    .then(function(check) {
      assert.strictEqual(check, true, 'admin user should have access to user module');
    });
});

Timeouts específicos de teste também podem ser aplicados, ou o uso de this.timeout (0) para desabilitar todos os tempos limite:

 it('should take less than 500ms', function(done){
  this.timeout(500);
  setTimeout(done, 300);
});

fonte: https://mochajs.org/#timeouts
Olá, instalou o botium directline3 enfrentando o erro 'Tempo limite de 60000ms excedido' de acordo com suas diretrizes em qual arquivo devemos adicionar essas linhas

Resolvi isso criando um tempo limite global em vez de defini-lo para testes individuais ou adicionar a configuração ao meu arquivo package.json . Na minha pasta de teste, criei um arquivo mocha.opts . No arquivo, eu defino um intervalo de tempo limite razoável para que meus testes sejam executados, por exemplo,

--timeout 10000

Eu também estava recebendo aquele erro e, após várias horas de pesquisa e depuração, encontrei a causa raiz.

Considere este teste:

const delay = require('delay')

describe('Test', function() {
    it('should resolve', async function(done) {
      await delay(1000)
    })
})

Quando executo o teste, recebo este erro:

Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.

Agora, considere este teste ligeiramente diferente, em que o argumento concluído é removido :

const delay = require('delay')

describe('Test', function() {
    it('should resolve', async function() {
      await delay(1000)
    })
})

Quando eu executo este teste, ele passa.

De alguma forma, a presença do argumento done na função assíncrona quebra o teste, mesmo se não for usado e mesmo se done () for chamado no final do teste.

basta adicionar em seu package.json em scripts

       "scripts": {
            "start": "SET NODE_ENV=dev && node ./bin/www",
            "devstart": "SET NODE_ENV=dev && nodemon ./bin/www",
            "test": "mocha --timeout 10000"  <= increase this from 1000 to 10000
        },

Então você pode apenas correr

      npm test

Adicionar --timeout 10000 aos "scripts" de "teste" funcionou perfeitamente para mim.
Obrigado!

Esta página foi útil?
0 / 5 - 0 avaliações