2012-08-21 13 views
18

Estoy intentando implementar una prueba (1) para este módulo (2).
Mi propósito es verificar si la colección se obtiene cuando se desencadena un evento en particular.
Como puede ver en mi comentario en (2) aparece el mensaje Error: Expected a spy, but got Function.
El módulo funciona pero la prueba falla. ¿algunas ideas?Se esperaba un espía, pero se obtuvo la función


(1)

// jasmine test module 

describe('When onGivePoints is fired', function() { 
    beforeEach(function() { 
     spyOn(this.view.collection, 'restartPolling').andCallThrough(); 
     app.vent.trigger('onGivePoints'); 
    }); 
    it('the board collection should be fetched', function() { 
     expect(this.view.collection.restartPolling).toHaveBeenCalled(); 
     // Error: Expected a spy, but got Function. 
    }); 
}); 

(2)

// model view module 
return Marionette.CompositeView.extend({ 
    initialize: function() { 
     this.collection = new UserBoardCollection(); 
     this.collection.startPolling(); 
     app.vent.on('onGivePoints', this.collection.restartPolling); 
    }, 
    // other code 
}); 
+0

no hay suficiente código para ver lo que está sucediendo. incluya más que solo las funciones individuales: incluya la definición del objeto al que pertenecen las funciones y el código que ejemplifica los objetos, al menos. –

+0

@DerickBailey gracias por su tiempo. Actualicé mi pregunta con el código de modo. –

+0

Uso QUnit en lugar de Jasmine, pero ¿no debería su llamada a app.vent.trigger estar en el método "it" en lugar de beforeEach? – codemonkey

Respuesta

32

Usted tiene que estar en el método actual, que en este caso es en el prototipo.

describe('When onGivePoints is fired', function() { 
    beforeEach(function() { 
     spyOn(UsersBoardCollection.prototype, 'restartPolling').andCallThrough(); 
     app.vent.trigger('onGivePoints'); 
    }); 
    it('the board collection should be fetched', function() { 
     expect(UsersBoardCollection.prototype.restartPolling).toHaveBeenCalled(); 
    }); 
}); 

Espiando en el prototipo es un buen truco que puede utilizar cuando no se puede llegar a la instancia real que se desea para espiar.

2

También estaba recibiendo el mismo problema, pero lo resolví pasando un argumento en la llamada a la función. Entonces usted tiene que escribir el caso de test como este en el it

var data = {name:"test"} 
spyOn(UsersBoardCollection.prototype, "restartPolling").and.callThrough(); 
UsersBoardCollection.prototype.restartPolling(data); 
expect(UsersBoardCollection.prototype.restartPolling).toHaveBeenCalled(); 
+0

gracias trabajado para mí bien !!! –

-2

tuve este error porque tenía dos versiones de sinon cargados, o posiblemente yo no estaba inicialización de sinon-jazmín correctamente. Cuando cargué explícitamente sinon y luego sinon jazmín en mi configuración de especificaciones, comenzó a funcionar correctamente.

Cuestiones relacionadas