使用sinon和promises进行单元测试

时间:2017-07-14 12:58:29

标签: javascript unit-testing promise sinon sinon-chai

我有一个函数返回一个Promise包裹着另一个函数,它与它自己的promises / callback实现一样,如下所示:

function getResult() {
  return new Promise((resolve, reject) => {
   const service = Service(config)
    return Service.initialize({scope: 'param'})
      .success((result) => {
        result ? resolve(service.res) : reject(new Error('Something happened'))
      })
      .error(() => {
        reject(new Error('Something happened'))
      )})
  })
}

编辑:我可以将上述功能重写为:

function getResult(done) {
 const service = Service(config)
  Service.initialize({scope: 'param'})
   .success((result) => {
     result ? done(null, result) : done(new Error('Something happened'), null))
   })
   .error(() => {
     done(new Error('Something happened'), null)
   }

我不知道如何对这样的事情进行单元测试?我尝试stub Service并使用sinon检查是否已调用,但以下内容无效:

it('should initialize service and return res', () => {
    const mockService = sinon.stub(Service, 'initialize')
    mockService.withArgs({scope: 'param'}).returns(Promise.resolve(true))

    expect(mockService.callCount).to.equal(1)
  })

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

您只是在检查它是否被调用,因此无需等待任何事情。

it('should initialize service and return res', () => {
    const mockService = sinon.stub(Service, 'initialize')
    mockService.withArgs({scope: 'param'}).returns(Promise.resolve(true))

    getResult()

    expect(mockService.callCount).to.equal(1)
  })