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