spyon - spy test javascript
Jasmine Spies.and.stub method (2)
He estado leyendo la documentación de Jasmine y he estado luchando para entender lo que realmente hace el método Spies .and.stub
. El inglés no es mi idioma nativo, por lo que ni siquiera sé qué significa realmente la palabra "stub", y no hay traducción para mi idioma.
En la documentación dice:
Cuando se utiliza una estrategia de llamada para un espía, el comportamiento del apéndice original puede devolverse en cualquier momento con y.stub.
describe("A spy", function() {
var foo, bar = null;
beforeEach(function() {
foo = {
setBar: function(value) {
bar = value;
}
};
spyOn(foo, ''setBar'').and.callThrough();
});
it("can call through and then stub in the same spec", function() {
foo.setBar(123);
expect(bar).toEqual(123);
foo.setBar.and.stub();
bar = null;
foo.setBar(123);
expect(bar).toBe(null);
});
});
¿Qué hace realmente and.stub
y en qué sirve?
Para completar la respuesta anterior:
De hecho, no está claro en el documento, pero está muy claro en el código fuente:
plan = function() {};
-> la función llamada está vacía
this.callThrough = function() {
plan = originalFn;
-> La función llamada es la función original.
this.stub = function(fn) {
plan = function() {};
-> la función llamada está vacía (otra vez)
Para el término, puede mirar wikipedia: http://en.wikipedia.org/wiki/Test_stub
En pocas palabras, es un objeto "falso" que puedes controlar y reemplaza un objeto "real" en tu código.
Para la función, lo que entiendo es que and.stub()
elimina el efecto de and.callThrough()
en un espía.
Cuando llama a and.callThrough
, el espía actúa como un proxy, llama a la función real, pero pasa a través de un objeto espía que le permite agregar pruebas como la expectativa.
Cuando llamas a and.stub
, o si nunca llamas a and.callThrough
, el espía no llamará a la función real. Es realmente útil cuando no desea probar el comportamiento de un objeto, pero asegúrese de que haya sido llamado. Ayudándole a mantener su prueba verdaderamente unitaria.