我有一个正在尝试测试的简单方法。
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)
})
})
})
答案 0 :(得分:1)
根据您提供的代码,看起来listObjects
是一个接受对象和回调的函数,有时会调用该回调,因此模拟它的最简单方法可能是这个:
listObjects: (_, c) => c()
您正在测试的函数似乎只关心listObjects
是否将错误传递给回调,因此这似乎就足够了。
旁注:您在return resolve
函数中有两个地方isS3Healthy
,但是在这里使用return
几乎毫无用处。要解决承诺,只需调用resolve(...)
而不返回它即可。