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