Espiando en Backbone.js ruta llamadas con Jasmine
Tener problemas para espiar el método llama a un Enrutador Backbone para asegurarse de que es el método correcto en una ruta determinada.
extracto de la prueba
describe 'Router', ->
beforeEach ->
@router = new App.Router()
Backbone.history.start()
afterEach ->
Backbone.history.stop()
describe 'routes', ->
it 'should be defined', ->
expect(@router.routes).toBeDefined()
describe 'default route', ->
it 'should be defined', ->
expect(@router.routes['']).toBeDefined()
it 'should call index', ->
spy = spyOn(@router, "index")
@router.navigate('', true)
expect(spy).toHaveBeenCalled()
El enrutador
class App.Router extends Backbone.Router
routes:
'' : 'index'
index: ->
console.log "router.index has been called"
Todo pasa excepto la última prueba "debería llamar índice". Falla con el mensaje "Se esperaba que se haya llamado el índice de espía". He probado otras variantes
it "should call index", ->
spyOn(@router, "index")
@router.navigate('', true)
expect(@router.index).toHaveBeenCalled()
También puedo ver el resultado del registro "router.index ha sido llamado" en la salida de prueba de la función Router.index original
¡Gracias!
EDITAR: una solución
describe '#1 Solution', ->
it 'should call index', ->
spyOn(App.Router.prototype, "index")
@router = new App.Router()
Backbone.history.start()
@router.navigate('', true)
expect(App.Router.prototype.index).toHaveBeenCalled()