Javascript 主干和茉莉间谍:监视特定型号的触发呼叫
我正在尝试编写一个jasmine spy,用于侦听主干模型事件触发器。从某种程度上说,间谍是有效的:它会对每一个模型进行间谍。有没有办法我只能让它找一个特定的电话 例如,如果我想监视@trigger“error”,而不是@trigger“change”,我可以这样做吗?在我下面的模型中,@set调用还触发了一个主干更改事件,这会触发我的触发间谍并导致测试失败 主干模型定义:Javascript 主干和茉莉间谍:监视特定型号的触发呼叫,javascript,jquery,backbone.js,jasmine,Javascript,Jquery,Backbone.js,Jasmine,我正在尝试编写一个jasmine spy,用于侦听主干模型事件触发器。从某种程度上说,间谍是有效的:它会对每一个模型进行间谍。有没有办法我只能让它找一个特定的电话 例如,如果我想监视@trigger“error”,而不是@trigger“change”,我可以这样做吗?在我下面的模型中,@set调用还触发了一个主干更改事件,这会触发我的触发间谍并导致测试失败 主干模型定义: class @AdminDatasetModel extends Backbone.Model toggleEnabl
class @AdminDatasetModel extends Backbone.Model
toggleEnabled: ->
@set 'enabled', !@get('enabled')
$.ajax
url: "#{@urlRoot}/#{@get('id')}/enable"
type: 'POST'
data:
enabled: @get 'enabled'
success: (data) =>
PDLS.vent.trigger 'admin:itemToggled', @
error: (jqXHR) =>
@trigger 'error', 'There was a problem updating your dataset!'
describe 'An admin dataset model', ->
MOCK_GET_DATA =
id: 1
name: 'someName'
enabled: true
permissions:
userId: 2
MOCK_SUCCESS_DATA =
succes: true
MOCK_ERROR_DATA =
error: true
dataset = null
beforeEach ->
PDLS = new PDLSApp
# Always return true for ajax requests, unless we specify otherwise
spyOn($, 'ajax').andCallFake (params) ->
params.success = MOCK_SUCCESS_DATA
@triggerSpy = spyOn AdminDatasetModel.prototype, 'trigger'
it 'should bubble up an error when appropriate', ->
$.ajax.isSpy = false
spyOn($, 'ajax').andCallFake (params) ->
params.error MOCK_ERROR_DATA
toggleSpy = spyOn AdminDatasetModel.prototype, 'toggleEnabled'
dataset = new AdminDatasetModel(MOCK_GET_DATA)
dataset.toggleEnabled()
expect(toggleSpy).toHaveBeenCalled()
expect(@triggerSpy).toHaveBeenCalledWith 'error', 'There was a problem updating your dataset!'
茉莉花规格定义:
class @AdminDatasetModel extends Backbone.Model
toggleEnabled: ->
@set 'enabled', !@get('enabled')
$.ajax
url: "#{@urlRoot}/#{@get('id')}/enable"
type: 'POST'
data:
enabled: @get 'enabled'
success: (data) =>
PDLS.vent.trigger 'admin:itemToggled', @
error: (jqXHR) =>
@trigger 'error', 'There was a problem updating your dataset!'
describe 'An admin dataset model', ->
MOCK_GET_DATA =
id: 1
name: 'someName'
enabled: true
permissions:
userId: 2
MOCK_SUCCESS_DATA =
succes: true
MOCK_ERROR_DATA =
error: true
dataset = null
beforeEach ->
PDLS = new PDLSApp
# Always return true for ajax requests, unless we specify otherwise
spyOn($, 'ajax').andCallFake (params) ->
params.success = MOCK_SUCCESS_DATA
@triggerSpy = spyOn AdminDatasetModel.prototype, 'trigger'
it 'should bubble up an error when appropriate', ->
$.ajax.isSpy = false
spyOn($, 'ajax').andCallFake (params) ->
params.error MOCK_ERROR_DATA
toggleSpy = spyOn AdminDatasetModel.prototype, 'toggleEnabled'
dataset = new AdminDatasetModel(MOCK_GET_DATA)
dataset.toggleEnabled()
expect(toggleSpy).toHaveBeenCalled()
expect(@triggerSpy).toHaveBeenCalledWith 'error', 'There was a problem updating your dataset!'
我通常更喜欢做以下事情:
listener = jasmine.createSpy 'listener'
model = new AdminDatasetModel(MOCK_GET_DATA)
model.on 'error', listener
model.toggleEnabled()
expect(listener).toHaveBeenCalledWith 'There was a problem updating your dataset!'
不是直接监视触发器是-我只关心错误事件,而不关心是否调用触发器。