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()

Respuestas a la pregunta(2)

Su respuesta a la pregunta