javascript - test - jasmine 2: la devolución de llamada asíncrona no se invocó dentro del tiempo de espera especificado por jasmine.DEFAULT_TIMEOUT_INTERVAL
karma js (3)
Tener problemas con el jazmín 2 y obtener especificaciones asíncronas conectadas:
define([''foo''], function(foo) {
return describe(''foo'', function() {
beforeEach(function(done) {
window.jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
return setTimeout((function() {
console.log(''inside timeout'');
return done();
}), window.jasmine.DEFAULT_TIMEOUT_INTERVAL);
});
return it(''passes'', function() {
return expect({}).toBeDefined();
});
});
});
Cuando corro a través del karma, vuelvo.
Error: Tiempo de espera: la devolución de llamada asíncrona no se invocó dentro del tiempo de espera especificado por jasmine.DEFAULT_TIMEOUT_INTERVAL.
y luego las especificaciones fallan. He intentado anular el tiempo de espera predeterminado, pero no puedo superar el error
Está utilizando el mismo intervalo de tiempo de espera que Jasmine está utilizando para fallar las pruebas en el tiempo de espera, es decir, su tiempo de espera se activa para activarse con el intervalo predeterminado de Jasmine, que falla la prueba.
Si establece que su tiempo de espera es menor que el tiempo de espera predeterminado de jazmín, la prueba pasa.
describe(''foo'', function () {
beforeEach(function (done) {
window.jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
setTimeout(function () {
console.log(''inside timeout'');
done();
}, 500);
});
it(''passes'', function () {
expect({}).toBeDefined();
});
});
Ver violín here
Mis 2 centavos. También recibí este error mencionado en la pregunta en otro escenario.
Tenía una especificación muy simple como esta:
describe(''login feature'', function() {
it(''should show the logged in user name after successful login'', function(done) {
expect({}).toBeDefined();
//done(); // if you don''t call this done here, then also above error comes
});
});
Ver la función comentada // done () en ''it''
Otra opción que podría funcionar para usted es usar async
La función asíncrona es una de las utilidades de prueba angular y debe importarse ... Toma una función sin parámetros y devuelve una función que se convierte en el verdadero argumento para el anterior.
El cuerpo del argumento asíncrono se parece mucho al cuerpo de un síncrono antes de cada. No hay nada obviamente asincrónico al respecto. Por ejemplo, no devuelve una promesa y no hay una función hecha a la que llamar como habría en las pruebas asíncronas estándar de Jasmine. Internamente, async organiza el cuerpo de beforeEach para que se ejecute en una zona de prueba async especial que oculta la mecánica de la ejecución asíncrona.
Consulte: https://angular.io/docs/ts/latest/guide/testing.html#!#async-in-before-each
describe(''Component: MyComponent'', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
providers: [
{provide: MyService, useValue: MyServiceMock()},
]
})
// Using webpack through Angular Cli. You may need ".compileComponents()"
fixture = TestBed.createComponent(MyComponent)
component = fixture.componentInstance
// Initialize the component
component.ngOnInit()
fixture.detectChanges()
}))
it(''should show the logged in user name after successful login'',() {
expect({}).toBeDefined()
})
})