【问题标题】:sinon testing ember.js .then methodsinon 测试 ember.js .then 方法
【发布时间】:2014-07-31 18:43:28
【问题描述】:

以下2个函数在coffeescript、ember.js函数中

fetchPage: (params) ->
    @store.find 'device', params

getMore: (params) ->

      nextPage = @get('page') + 1
      params.page = nextPage || 1 #when page is null, nextpage still 1
      @fetchPage(params).then (devices) =>
         @send 'gotMore', devices, nextPage

如何测试最后两行:

@fetchPage(params).then (devices) =>
   @send 'gotMore', devices, nextPage

我尝试了以下方法,但没有成功

test 'actions: getMore - not at last page & page exists', ->
  Em.run =>
    @params = @store.createRecord('device', {id: 1, page: 6})
  # params = {page: 99}
  metaDataStub = sinon.stub(@store, 'metadataFor')
  deviceMetaData = {total_pages: 8}
  metaDataStub.withArgs('device').returns(deviceMetaData)

  fetchPageStub = sinon.stub(@controller, 'fetchPage')
  @controller.set 'page', 6

  @controller.send 'getMore', @params
  equal params.page,7, 'params.page set to next page'
  ok fetchPageStub.calledWithExactly(@params), 'fetchPage called'
  metaDataStub.restore()

test 'actions: getMore - not at last page & page not existed', ->
  params = {page: 99}
  metaDataStub = sinon.stub(@store, 'metadataFor')
  deviceMetaData = {total_pages: 8}
  metaDataStub.withArgs('device').returns(deviceMetaData)
  @controller.set 'page', null

  @controller.send 'getMore', params
  equal params.page,1, 'params.page set to 1 when next page not exist'
  metaDataStub.restore()

它会抛出错误:“Cannot read property 'then' of undefined”,其中代码标有 **** 任何帮助表示赞赏。非常感谢。

【问题讨论】:

    标签: javascript unit-testing ember.js coffeescript sinon


    【解决方案1】:

    你需要做的实际上是返回一个承诺,比如:

    promise = Ember.RSVP.Promise(function(resolve, reject) {
      resolve()
      reject()
    })
    

    如果你想测试 'then' 里面的内容,那么在 promise 的 'resolve' 函数中返回一些数据。

    然后,您可以通过执行以下操作来测试它是否被调用:

    mock = sinon.mock(controller);
    mock.expects('fetchPage').once.returns(promise); // the promise defined earlier
    

    您可以使用相同的行来测试另一个方法 (gotMore) 是否使用正确的参数调用:

    mock.expects('gotMore').once.withArgs(whateverYouReturnInReolve, whateverPageNumberIs)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-24
      • 2021-02-18
      • 1970-01-01
      • 2016-01-21
      • 1970-01-01
      • 2017-06-20
      相关资源
      最近更新 更多