Como faço para que este teste seja aprovado sem recorrer a blocos runs / waitsFor?
it("cannot change timeout", function(done) {
request("http://localhost:3000/hello", function(error, response, body){
expect(body).toEqual("hello world");
done();
});
});
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
valor funcionou para mim em uma configuração totalmente nova construída do zero usando Jasmine + Jest. Funciona como esperado.it
. No momento em que você está no teste,done
parece já ter se ligado ao que quer queDEFAULT_TIMEOUT_INTERVAL
fosse antes deit
começar.Solicitação pull enviada para este recurso ( https://github.com/mhevery/jasmine-node/pull/142 )
it("cannot change timeout", function(done) { request("http://localhost:3000/hello", function(error, response, body){ expect(body).toEqual("hello world"); done(); }); }, 5000); // set timeout to 5 seconds
fonte
Para definir o tempo limite global Jasmine-Node, faça o seguinte:
jasmine.getEnv().defaultTimeoutInterval = timeoutYouWouldPrefer;// e.g. 15000 milliseconds
Crédito ao desenvolvedor Gabe Hicks por descobrir a parte .getEnv () por meio de depuração, apesar da desinformação no documento README que afirma que foi feito configurando jasmine.DEFAULT_TIMEOUT_INTERVAL.
Se você deseja definir um tempo limite personalizado apenas para um it (), pode tentar passar o tempo limite (milissegundos) como um terceiro argumento (após a instrução da string e a função). Há um exemplo disso sendo feito aqui , mas não tenho certeza do que aconteceria se o tempo limite personalizado fosse maior do que o padrão do Jasmine. Eu espero que isso falhe.
fonte
jasmine.DEFAULT_TIMEOUT_INTERVAL = 12000;
um arquivo de configuração global que uso para todos os testes e funciona conforme o esperado.Parece que agora você pode adicioná-lo como o último argumento para a
it
função:describe('my test', function(){ it('works', function(done){ somethingAsync().then(done); }, 10000); // changes to 10 seconds });
fonte
No Angular, coloque isso fora do seu bloco de descrição:
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
Isso se aplica a todos os testes no arquivo .spec.ts
fonte
Adicionando:
jasmine.DEFAULT_TIMEOUT_INTERVAL = yourTime;
em um arquivo auxiliar funcionou para mim.fonte
Coloque depois da
describe
declaração:describe("A saves to DB", function() { jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
fonte
Por que não espionando
setTimeout()
?Algo como:
var spy = spyOn(window, 'setTimeout').andCallFake(function (func, timeout) { expect(timeout).toEqual(2500); func(); }); setTimeOut(function () { ... }, 2500); expect(spy).toHaveBeenCalled();
fonte
No meu caso, tive vários casos de teste e, enquanto usava a solução mencionada, estava usando:
beforeEach(function() { originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL; jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000; });
o DEFAULT_TIMEOUT_INTERVAL não foi atualizado no primeiro caso de teste, então eu tive que adicionar este:
beforeAll(() => { jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000; })
ao meu código para executar todos os testes com sucesso.
fonte
Para fazer isso globalmente para todos os seus testes (no caso do e2e ou teste de integração), você pode usar um auxiliar.
Um arquivo auxiliar, quando configurado corretamente, deve ser carregado antes que os testes sejam executados e permitir que você altere o DEFAULT_TIMEOUT_INTERVAL globalmente:
spec / support / jasmine.json
{ ... "helpers": [ "/path/to/helpers/**/*.ts" ] }
helpers / timeout.ts
jasmine.DEFAULT_TIMEOUT_INTERVAL = 300000;
fonte
Altere j $ .DEFAULT_TIMEOUT_INTERVAL para 10000 no seguinte arquivo: npm \ node_modules \ jasmine-core \ lib \ jasmine-core
fonte