刷新 Bluebird 中所有已解决的承诺
Flushing all resolved promises in Bluebird
所以我是从 angular 转为 Bluebird 的新人,我正在尝试为使用 Bluebird 承诺的代码构建单元测试。我要测试的代码如下所示:
user {
handleAuth(token) {
console.log(token);
},
login(username, password, saveUsername) {
return lib.login(username, password).then(this.handleAuth.bind(this));
},
}
我已经模拟了 lib.login,return 承诺 return 像这样的解析值
lib.login.and.returnValue(Promise.resolve(true));
但是在单元测试的space中没有执行handler。在 Angular 世界中,我需要告诉 $timeout 服务刷新并且所有已解决的承诺将执行它们的链接方法。 Bluebird 中的等效项是什么?
您将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
之后的队列中会创建更多承诺。
请注意,这 不 Promises/A+ 合规。我建议只写一个异步测试。
所以我是从 angular 转为 Bluebird 的新人,我正在尝试为使用 Bluebird 承诺的代码构建单元测试。我要测试的代码如下所示:
user {
handleAuth(token) {
console.log(token);
},
login(username, password, saveUsername) {
return lib.login(username, password).then(this.handleAuth.bind(this));
},
}
我已经模拟了 lib.login,return 承诺 return 像这样的解析值
lib.login.and.returnValue(Promise.resolve(true));
但是在单元测试的space中没有执行handler。在 Angular 世界中,我需要告诉 $timeout 服务刷新并且所有已解决的承诺将执行它们的链接方法。 Bluebird 中的等效项是什么?
您将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
之后的队列中会创建更多承诺。
请注意,这 不 Promises/A+ 合规。我建议只写一个异步测试。