Sinon测试ember.js .then方法

sinon testing ember.js .then method

本文关键字:then 方法 js ember 测试 Sinon      更新时间:2023-09-26

以下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 ",其中代码被标记为****任何帮助都是感激的。非常感谢。

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

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)