我有以下函数使用bind
将上下文绑定到then
链。当我尝试测试它时,它会抛出
TypeError: redisClient.hgetallAsync(...).bind is not a function
myFunc() {
let self = this;
return redisClient.hgetallAsync('abcde')
.bind({ api: self })
.then(doStuff)
.catch(err => {
// error
});
}
测试
let redisClient = { hgetallAsync: sinon.stub() };
describe('myFunc', () => {
beforeEach(() => {
redisCLient.hgetallAsync.resolves('content!');
});
it('should do stuff', () => {
return myFunc()
.should.eventually.be.rejectedWith('Internal Server Error')
.and.be.an.instanceOf(Error)
.and.have.property('statusCode', 500);
});
});
答案 0 :(得分:0)
hgetallAsync
存根返回一个普通的JS Promise而不是Bluebird
的承诺。
要使用Bluebird
承诺,您需要使用Sinon
告诉.usingPromise()
这样做。
let redisClient = { hgetallAsync: sinon.stub().usingPromise(bluebird.Promise) };
文档链接: http://sinonjs.org/releases/v4.1.2/stubs/#stubusingpromisepromiselibrary