Belirli bir rotada doğru yöntemi çağırdığından emin olmak için bir Backbone Router üzerinde casusluk yöntem çağrıları yapmakta zorlanıyor. TestBackbone.js yolunda casusluk yapma, Jasmine ile iletişim kurar
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"
Her şey son test "endeksi aramak gerekir" hariç geçer yönlendirici gelen
alıntı. "Beklenen casus indeksi çağrıldı" mesajı ile başarısız. Ive da "router.index adı olmuştur" orijinal Router.index fonksiyonu test çıktısında
Teşekkür çıkışını log görebilen diğer varyantları
it "should call index", ->
spyOn(@router, "index")
@router.navigate('', true)
expect(@router.index).toHaveBeenCalled()
çalıştı!
DÜZENLEME: bir çözüm
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()
Teşekkürler! Gibi yolu budur :) – eldewall
Bu, bir rotanın tetiklenmesini test etmek için geçerli bir yol değildir. Tüm bu test, indeks fonksiyonunun yönlendiriciye bir geriçağırım olarak bağlı olması, fonksiyonun gerçekte rota tetiklendiğinde çağrılmamasıdır. Bakınız [bu S.O. bir yönlendirici bir url ile eşleştiğinde, ilgili rota işlevinin çağrıldığını doğrulamak için (http://stackoverflow.com/questions/9215737/testing-routers-in-backbone-js-properly). – louism2