Spionage auf Backbone.js Route Anrufe mit Jasmine

Probleme beim Ausspähen von Methodenaufrufen auf einem Backbone-Router, um sicherzustellen, dass auf einer bestimmten Route die richtige Methode aufgerufen wird.

Auszug aus dem Test

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

Der Router

class App.Router extends Backbone.Router
    routes:
        '' : 'index'

    index: ->
        console.log "router.index has been called"

Alles ist bestanden, bis auf den letzten Test "sollte Index aufrufen". Es schlägt mit der Meldung "Erwarteter Spionageindex wurde aufgerufen" fehl. Ich habe andere Varianten ausprobiert

it "should call index", ->
    spyOn(@router, "index")
    @router.navigate('', true)
    expect(@router.index).toHaveBeenCalled()

Ich kann auch sehen, dass die Protokollausgabe "router.index" in der Testausgabe der ursprünglichen Router.index-Funktion aufgerufen wurde

Vielen Dank!

EDIT: Eine Lösung

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage