0
我有一个非常简单的单元测试,看起来像这样:开玩笑惩戒方法
import ApiWrapper from '../../services/api_wrapper';
jest.unmock('../helper')
describe('Helper',() => {
let Helper;
beforeEach(() => {
Helper = require('../helper').default;
});
it('calls the Api Wrapper',() => {
Helper.help()
expect(ApiWrapper.help).toHaveBeenCalled();
});
});
当助手看起来是这样的:
import ApiWrapper from '../services/api_wrapper'
class Helper {
help() {
ApiWrapper.help()
}
}
export default new Helper();
而且ApiWrapper看起来是这样的:
class ApiWrapper {
static help() {
console.log('help!')
}
}
export default ApiWrapper;
ApiWrapper.help()被Jest嘲笑,所以'help!'从未打印过,但测试期望失败。
export default {
help:() => { console.log('help!'); }
}
但是,由于它的工作原理,如果我们改变了进口规范(所以ApiWrapper在beforeEach进口),并重写ApiWrapper:如果我们改写ApiWrapper仅仅是一个普通的JavaScript对象像这样仍然失败成为一个Singleton类,如下所示:
class ApiWrapper {
help() {
console.log('help!');
}
}();
export default new ApiWrapper();
这是什么使Jest的嘲笑行为成为现实?
有关线程的一些更多信息从这个问题:https://github.com/facebook/jest/issues/1245 – eebbesen