javascript - property - title html
Restablecer llamada en espĂa Jasmine no vuelve (2)
La sintaxis de Jasmine 2 es diferente de 1.3 con respecto a las funciones de espía. Ver los documentos de Jasmine here .
Específicamente, restableces un espía con spy.calls.reset();
Así es como debería verse la prueba:
// Source
var objectUnderTest = {
someFunction: function (cb) {
var promise = new Promise(function (resolve, reject) {
if (true) {
cb();
resolve();
} else {
reject(new Error("something bad happened"));
}
});
return promise;
}
}
// Test
describe(''foo'', function () {
it(''tests'', function (done) {
var spy = jasmine.createSpy(''mySpy'');
objectUnderTest.someFunction(spy).then(function () {
expect(spy).toHaveBeenCalled();
done();
});
});
it(''tests deeper'', function (done) {
var spy = jasmine.createSpy(''mySpy'');
objectUnderTest.someFunction(spy).then(function () {
expect(spy).toHaveBeenCalled();
spy.calls.reset();
return objectUnderTest.someFunction(spy);
}).then(function () {
expect(spy).toHaveBeenCalled();
expect(spy.calls.count()).toBe(1);
done();
});
});
});
Ver violín here
Estoy usando un espía Jasmine (2.2.0) para ver si se llama a un cierto callback.
Código de prueba:
it(''tests'', function(done) {
var spy = jasmine.createSpy(''mySpy'');
objectUnderTest.someFunction(spy).then(function() {
expect(spy).toHaveBeenCalled();
done();
});
});
Esto funciona como se esperaba. Pero ahora, estoy agregando un segundo nivel:
it(''tests deeper'', function(done) {
var spy = jasmine.createSpy(''mySpy'');
objectUnderTest.someFunction(spy).then(function() {
expect(spy).toHaveBeenCalled();
spy.reset();
return objectUnderTest.someFunction(spy);
}).then(function() {
expect(spy.toHaveBeenCalled());
expect(spy.callCount).toBe(1);
done();
});
});
Esta prueba nunca vuelve, porque aparentemente la devolución de llamada done
nunca se llama. Si spy.reset()
la línea spy.reset()
, la prueba finaliza, pero obviamente falla en la última expectativa. Sin embargo, el campo callCount
parece estar undefined
, en lugar de 2
.
Otra forma de escribirlo:
spyOn(foo, ''bar'');
expect(foo.bar).toHaveBeenCalled();
foo.bar.calls.reset();