Отслеживание вызовов маршрута Backbone.js с помощью Jasmine

Возникли проблемы с отслеживанием вызовов методов на магистральном маршрутизаторе, чтобы убедиться, что он вызывает правильный метод на заданном маршруте.

выдержка из теста

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

Маршрутизатор

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

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

Все проходит, кроме последнего теста "должен вызывать индекс". Он завершается с ошибкой с сообщением «Ожидается, что был вызван шпионский индекс». Пробовал и другие варианты

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

Я также вижу вывод журнала «router.index был вызван» в тестовом выводе исходной функции Router.index

. Спасибо!

РЕДАКТИРОВАТЬ :Одно решение

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()
9
задан eldewall 7 August 2012 в 14:28
поделиться