Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 主干和茉莉间谍:监视特定型号的触发呼叫_Javascript_Jquery_Backbone.js_Jasmine - Fatal编程技术网

Javascript 主干和茉莉间谍:监视特定型号的触发呼叫

Javascript 主干和茉莉间谍:监视特定型号的触发呼叫,javascript,jquery,backbone.js,jasmine,Javascript,Jquery,Backbone.js,Jasmine,我正在尝试编写一个jasmine spy,用于侦听主干模型事件触发器。从某种程度上说,间谍是有效的:它会对每一个模型进行间谍。有没有办法我只能让它找一个特定的电话 例如,如果我想监视@trigger“error”,而不是@trigger“change”,我可以这样做吗?在我下面的模型中,@set调用还触发了一个主干更改事件,这会触发我的触发间谍并导致测试失败 主干模型定义: class @AdminDatasetModel extends Backbone.Model toggleEnabl

我正在尝试编写一个jasmine spy,用于侦听主干模型事件触发器。从某种程度上说,间谍是有效的:它会对每一个模型进行间谍。有没有办法我只能让它找一个特定的电话

例如,如果我想监视@trigger“error”,而不是@trigger“change”,我可以这样做吗?在我下面的模型中,@set调用还触发了一个主干更改事件,这会触发我的触发间谍并导致测试失败

主干模型定义:

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!'

不是直接监视触发器

是-我只关心错误事件,而不关心是否调用触发器。