[英]Mock ES6 dependencies when unit testing
假定以下兩個ES6類:
my-random.js:
export default class MyRandom {
get() { return Math.random(); }
}
app.js:
import MyRandom from './random';
export default class App {
get() {
let r = new MyRandom();
let total = r.get() * r.get(); // Complex calc goes here!
return total;
}
}
現在,我想對來自app.js
的get
進行單元測試。 所以我想嘲笑MyRandom
。 為此,我發現了一個非常有趣的庫Mocktail
根據文檔,您應該將my-random.js更改為
import {mock} from 'mocktail';
class MyRandom {
get() { return Math.random(); }
}
export default mock(MyRandom);
在測試文件中,您必須按照以下步驟告訴環境您正在測試:
import {env, ENV, inject} from 'mocktail';
env(ENV.TESTING);
class MyRandomMock {
get() {
return 10; // Not so random anymore
}
}
inject('MyRandom', MyRandomMock);
並且您應該能夠測試app.js
不幸的是,當我嘗試使用MyRandom時,它永遠不會被模擬類所替代。 任何幫助,將不勝感激!!
我在這里的 github上設置了一個測試項目來演示該問題。 如您所見,測試將失敗:(
如果有更好的方法來實現我所需要的,請告訴我!
我認為您需要在測試文件中的App
之前導入setup
,這將注入模擬並在App中調用它。
import './setup';
import App from '../src/app';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.