所以我是从角度转换为Bluebird的新转换器,我正在尝试为使用Bluebird承诺的代码构建单元测试。我想测试的代码如下所示:
user {
handleAuth(token) {
console.log(token);
},
login(username, password, saveUsername) {
return lib.login(username, password).then(this.handleAuth.bind(this));
},
}
我已经模拟了lib.login,它返回一个promise,而不是像这样返回一个已解析的值
lib.login.and.returnValue(Promise.resolve(true));
但是处理程序不在单元测试的空间中执行。在Angular世界中,我需要告诉$ timeout服务刷新,所有已解析的promise将执行其链式方法。 Bluebird中的等价物是什么?
答案 0 :(得分:1)
您可以Promise.setScheduler
来控制日程安排:
const queue = new class CallbackQueue {
constructor() { this._queue = []; }
flush() { this._queue.forEach(fn => fn()); }
push(fn) { this._queue.push(fn); }
}
Promise.setScheduler(fn => queue.push(fn);
// later
queue.flush(); // call every callback in a `then`.
请注意,您可能需要多次调用.flush
,因为在then
以后的队列中会创建更多的承诺。
请注意,这是不承诺/ A +兼容。我建议只写一个异步测试。