[英]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);
});
});
});
});
我正在經歷限制器回調,所以我需要一個運行循環(據我所知)。 我想在單元測試中斷言使用了運行循環。 我可以斷言promise會從緩存中解析出正確的值,但是我不知道如何驗證是否使用了運行循環。 換句話說,我可以刪除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);
哪個輸出:
原始方法
替代方法
這是演示 。
最終,您可以使用:
我可以將run loop調用包裝在另一個Ember服務中,以便對它進行存根處理,但這似乎有點過頭了。
但是似乎將函數作為參數傳遞更為簡單。
如果未啟動運行循環,則測試將失敗,因為您將獲得一個斷言。 這還不夠嗎?
為什么需要斷言使用了運行循環?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.