Probleme bei der Ausspähung Methode Anrufe auf einem Backbone-Router, um sicherzustellen, dass es die richtige Methode auf einer bestimmten Route ruft.Ausspionieren Backbone.js Route Anrufe mit Jasmine
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 geht außer dem letzten Test "sollte Index nennen". Es schlägt mit der Meldung "Erwarteter Spionage-Index wurde aufgerufen" fehl. Ive versucht, andere Varianten
it "should call index", ->
spyOn(@router, "index")
@router.navigate('', true)
expect(@router.index).toHaveBeenCalled()
Ich kann auch das sehen Protokollausgabe in der Testausgabe von der ursprünglichen Router.index Funktion
Dank „router.index genannt wurde“!
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()
Danke! Sieht so aus, als ob das der richtige Weg ist :) – eldewall
Dies ist kein praktikabler Weg, das Auslösen einer Route zu testen. Alles was getestet wird, ist, dass die Indexfunktion als Rückruf an den Router gebunden war, nicht dass die Funktion tatsächlich aufgerufen wurde, als die Route ausgelöst wurde. Siehe [diese S.O. Post] (http://stackoverflow.com/questions/9215737/testing-routers-in-backbone-js-properly), um zu überprüfen, ob die entsprechende Routenfunktion aufgerufen wurde, wenn ein Router mit einer URL übereinstimmt. – louism2