¿Cómo puedo hacer que esta prueba pase sin tener que recurrir a bloques de carreras / esperas?
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 me sirvió en una nueva configuración creada desde cero con Jasmine + Jest. Funciona como se esperaba.it
. Para cuando estás en la prueba,done
parece que ya te has enganchado a lo queDEFAULT_TIMEOUT_INTERVAL
era antes deit
comenzar.Solicitud de extracción enviada para esta función ( 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
fuente
Para establecer el tiempo de espera global de Jasmine-Node, haga esto:
jasmine.getEnv().defaultTimeoutInterval = timeoutYouWouldPrefer;// e.g. 15000 milliseconds
Gracias al desarrollador Gabe Hicks por descubrir la parte .getEnv () mediante la depuración a pesar de la información errónea en el documento README que afirma que se hace configurando jasmine.DEFAULT_TIMEOUT_INTERVAL.
Si desea establecer un tiempo de espera personalizado solo para uno (), puede intentar pasar el tiempo de espera (milisegundos) como un tercer argumento (después de la declaración de cadena y la función). Hay un ejemplo de que se está haciendo aquí , pero no estoy seguro de lo que sucedería si el tiempo de espera personalizado era más largo que por defecto de Jasmine. Espero que falle.
fuente
jasmine.DEFAULT_TIMEOUT_INTERVAL = 12000;
un archivo de configuración global que uso para todas las pruebas y funciona como se esperaba.Parece que ahora puede agregarlo como último argumento para la
it
función:describe('my test', function(){ it('works', function(done){ somethingAsync().then(done); }, 10000); // changes to 10 seconds });
fuente
En Angular, ponga esto fuera de su bloque de descripción:
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
Esto se aplica a todas las pruebas en el archivo .spec.ts
fuente
Ponlo después de la
describe
declaración:describe("A saves to DB", function() { jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
fuente
Agregar:
jasmine.DEFAULT_TIMEOUT_INTERVAL = yourTime;
en un archivo de ayuda funcionó para mí.fuente
¿Por qué no espiando
setTimeout()
?Algo como:
var spy = spyOn(window, 'setTimeout').andCallFake(function (func, timeout) { expect(timeout).toEqual(2500); func(); }); setTimeOut(function () { ... }, 2500); expect(spy).toHaveBeenCalled();
fuente
En mi caso, tuve varios casos de prueba y mientras usaba la solución mencionada anteriormente estaba usando:
beforeEach(function() { originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL; jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000; });
el DEFAULT_TIMEOUT_INTERVAL no se actualizó en el primer caso de prueba, así que tuve que agregar esto:
beforeAll(() => { jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000; })
a mi código para ejecutar con éxito todas las pruebas.
fuente
Cambie j $ .DEFAULT_TIMEOUT_INTERVAL a 10000 en el siguiente archivo: npm \ node_modules \ jasmine-core \ lib \ jasmine-core
fuente