我在Ember服务中有这个代码:
run
我正在通过限制器回调,所以我需要一个运行循环(根据我的理解)。我想在单元测试中断言使用了一个运行循环。我可以断言promise会从缓存中解析出正确的值,但我不知道如何验证是否使用了运行循环。换句话说,我可以删除Ember.run
调用,我的所有测试仍然会通过,这是不可取的。
我想到的事情,我不想诉诸:
run
代替const { run } = Ember;
并使用存根和恢复,但我喜欢解析文件顶部的全局变量(@media screen and (min-width: 480px) {
body {
background-color: lightgreen;
}
}
),所以我不想牺牲那只是为了测试。基本上我想知道在输入运行循环时是否有任何事件会触发,我可以在测试中听到。如果涉及Ember私有,那没关系。
答案 0 :(得分:0)
您可以在方法中添加参数,这会使您的服务方法更“可测试”。分析这段代码:
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);
哪个输出:
原始方法
替换方法
这是demo。
最终你可以使用:
我可以在另一个Ember服务中包装run loop调用,这样我就可以存根 它,但这似乎有点矫枉过正。
但似乎传递函数作为参数更简单。
答案 1 :(得分:0)
如果未启动运行循环,则测试将失败,因为您将获得断言。这还不够吗?
为什么需要断言使用了运行循环?