你如何断言在 Ember.js 中使用了运行循环
How do you assert a run loop was used in Ember.js?
我在 Ember 服务中有以下代码:
return new Promise((resolve, reject) => {
semaphore.take(() => {
this.get('limiter').removeTokens(1, () => {
semaphore.leave();
this.get('requestSender').sendRequest(url).then(data => {
run(null, resolve, cache.put(url, data, cacheTime));
}).catch(function() {
run(null, reject, arguments);
});
});
});
});
我正在经历限制器回调,所以我需要一个运行循环(据我所知(。我想在单元测试中断言使用了运行循环。我可以断言承诺从缓存中解析正确的值,但我不知道如何验证是否使用了运行循环。换句话说,我可以删除run
调用,并且我的所有测试仍然会通过,这是不可取的。
我想到的事情我不想求助于:
- 我可以使用
Ember.run
而不是run
并使用存根和恢复,但我喜欢解构文件顶部的全局变量(const { run } = Ember;
(,所以我不想仅仅为了测试而牺牲它。 - 我可以将运行循环调用包装在另一个 Ember 服务中,以便我可以存根它,但这似乎有点矫枉过正。
基本上,我想知道在进入运行循环时是否有任何事件触发,我可以在测试中收听。如果涉及余烬私人也没关系。
您可以在方法中添加参数,这将使您的服务方法更"可测试"。分析以下代码片段:
const Ember = {
run() {
console.log('ORIGINAL METHOD');
}
};
const { run } = Ember;
const service = {
method(runMethod) {
let runToCall = runMethod ? runMethod : run;
runToCall();
}
};
// in application
service.method();
// in tests
function mockedRun() {
console.log('REPLACED METHOD');
};
service.method(mockedRun);
哪些输出:
原始方法
替换的方法
这是演示。
最终,您可以使用:
我可以将运行循环调用包装在另一个 Ember 服务中,以便我可以存根它,但这似乎有点矫枉过正。
但似乎将函数作为参数传递更简单。
如果未启动运行循环,测试将失败,因为您将获得断言。这还不够吗?
为什么需要断言使用了运行循环?
相关文章:
- JS.循环遍历多维数组,以计数元素在每列中的出现次数
- js循环遍历单击的元素子节点
- 在数组中迭代时的JS循环位置
- js-循环遍历数据库中的切片字符串和检查项
- Vide.js循环播放多个视频
- 带有foo.js和foo.js.coffee(空)的Rails资产管道导致js循环.为什么?
- 使用 svg.js 循环动画
- JS循环图像文件夹,预加载它们并分配给数组
- 为什么我的 JS 循环会覆盖对象中以前的条目
- 节点.js循环中的异步函数
- Moltin Cart,Laravel和Angular JS——循环通过JS对象
- 车把.js循环中的助手 #each 返回相同的结果
- Angular JS 循环遍历控制器中的多维数组
- JS循环不产生任何结果
- 使用velocity.js循环动画
- 如何将html放入js循环中
- 如何使用Knockout JS循环等运行常规/普通JavaScript代码
- jQuery/Js 循环使用 Codeigniter MySQL 输出数据
- JS循环迭代,但未传递值
- 当JS循环结束时,jQuery hide()