Problemy z podglądaniem wywołań metod na routerze szkieletowym w celu sprawdzenia, czy wywołuje właściwą metodę na danej trasie.Szpiegowanie połączeń z Backbone.js za pomocą Jasmine
fragment testu
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()
routera
class App.Router extends Backbone.Router
routes:
'' : 'index'
index: ->
console.log "router.index has been called"
Wszystko przechodzi z wyjątkiem ostatniego testu "powinien zadzwonić indeks". Nie powiedzie się z komunikatem "Oczekiwano, że indeks szpiegowski został wywołany". Ive próbował inne warianty
it "should call index", ->
spyOn(@router, "index")
@router.navigate('', true)
expect(@router.index).toHaveBeenCalled()
mogę też zobaczyć „router.index została nazwana” wyjście zalogować wyjścia testowego od pierwotnej funkcji Router.index
Dzięki!
EDIT: Jedno rozwiązanie
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()
Dzięki! Wygląda na to, że to jest droga :) – eldewall
To nie jest opłacalny sposób na przetestowanie wyzwalania trasy. Wszystko to jest testowanie, że funkcja indeksu została przypisana do routera jako callback, a nie to, że funkcja jest rzeczywiście wywoływana, gdy trasa została wyzwolona. Patrz [to S.O. post] (http://stackoverflow.com/questions/9215737/testing-routers-inbbackbone-js-properly) w celu sprawdzenia, czy odpowiednia funkcja trasy została wywołana, gdy router dopasuje adres URL. – louism2