Gặp sự cố khi gián đoạn cuộc gọi phương thức trên Bộ định tuyến đường trục để đảm bảo nó gọi đúng phương thức trên một tuyến đường nhất định.Làm gián đoạn cuộc gọi đường Backbone.js bằng Jasmine
đoạn trích từ bài kiểm tra
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()
Router
class App.Router extends Backbone.Router
routes:
'' : 'index'
index: ->
console.log "router.index has been called"
Tất cả mọi thứ trôi qua, ngoại trừ bài kiểm tra cuối cùng "nên gọi là Chỉ số". Không thành công với thông báo "Chỉ mục gián điệp dự kiến đã được gọi". Ive đã cố gắng biến thể khác
it "should call index", ->
spyOn(@router, "index")
@router.navigate('', true)
expect(@router.index).toHaveBeenCalled()
tôi cũng có thể thấy "router.index đã được gọi là" đăng nhập đầu ra trong đầu ra kiểm tra từ các chức năng Router.index gốc
Cảm ơn!
EDIT: Một giải pháp
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()
Cảm ơn! Có vẻ như đó là cách để đi :) – eldewall
Đây không phải là một cách khả thi để kiểm tra sự kích hoạt của một tuyến đường. Tất cả điều này là thử nghiệm là chức năng chỉ mục đã được ràng buộc với các bộ định tuyến như một cuộc gọi lại, không phải là chức năng thực sự được gọi là khi tuyến đường đã được kích hoạt. Xem [this S.O. post] (http://stackoverflow.com/questions/9215737/testing-routers-in-backbone-js-properly) để biết cách xác minh rằng hàm tuyến đường tương ứng đã được gọi khi một router khớp với một url. – louism2