【发布时间】:2023-03-13 23:59:01
【问题描述】:
假设有以下两个 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 here 上设置了一个测试项目来演示这个问题。如您所见,测试将失败:(
如果有更好的方法来实现我的需要,请告诉我!
【问题讨论】:
标签: javascript unit-testing ecmascript-6