我正在尝试测试这个简单的方法。
function isS3Healthy(s3, logger = console) {
return new Promise((resolve, reject) => {
s3.listObjects({}, (err, data) => {
if (err) {
logger.error(err)
return resolve(['s3', false])
}
return resolve(['s3', true])
})
})
}
我的测试不断超时,这与我的模拟对象不正确有关。为了正确测试我的方法,这个模拟对象需要是什么样子?
describe.only('#isS3Healthy', () => {
let s3
before(() => {
s3 = {
listObjects: ({}, (err, data) => {
return Promise.resolve(['s3', true])
})
}
})
it('should return that it is healthy', () => {
return isS3Healthy(s3)
.then(result => {
const [name, status] = result
expect(name).to.equal('s3')
expect(status).to.be.true
})
.catch(err => {
console.log('err = ', err)
})
})
})
最佳答案
根据您提供的代码,看起来 listObjects
是一个接受对象和回调的函数,并在某些时候调用该回调,因此可能是模拟它的最简单方法会是这样的:
listObjects: (_, c) => c()
您正在测试的函数似乎只关心 listObjects
是否将错误传递给回调,因此这看起来应该足够了。
旁注:您在 isS3Healthy
函数中的两个位置有 returnresolve
,但在此处使用 return
几乎可以肯定没有任何作用。要解决 promise ,只需调用 resolve(...)
而不返回它。
关于javascript - 如何使用具有回调的函数来模拟对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54892171/