如何模拟返回承诺的对象?

时间:2019-03-11 17:30:14

标签: javascript node.js

我想为此对象创建一个模拟,以进行单元测试。

sqs.listQueues().promise()
      .then(...

这是我尝试对此进行模拟并仍然收到错误sqs.listQueues(...).promise is not a function

的尝试之一
const sqs = {
    listQueues: () => Promise.resolve(this),
    promise: () => Promise.resolve()
  }

如何正确模拟该对象?

2 个答案:

答案 0 :(得分:3)

类似listQueues()的外观不应返回承诺。也许这行得通:

const sqs = {
  listQueues: () => ({
    promise: () => Promise.resolve()
  })
}

答案 1 :(得分:2)

这是一个相当幼稚的版本,可能会助您一臂之力。

const mockResolve = (val, delay = 0) => () => 
  new Promise((res) => setTimeout(() => res(val), delay))

const mockReject = (err, delay = 0) => () => 
  new Promise((_, rej) => setTimeout(() => rej(err), delay))

const sqs = {
  listQueues: () => ({
    promise: mockResolve('foo')
  })
}


sqs.listQueues().promise().then(console.log)

这可能有很多问题,但这只是初次通过。