特定のルートで正しいメソッドを呼び出すことを確認するために、バックボーン ルーターでメソッド呼び出しをスパイすることに問題があります。
テストからの抜粋
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 has been called」というログ出力も確認できます。
ありがとう!
編集:1つの解決策
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()