Unit testing 笑话中的嘲弄方法
我有一个非常简单的单元测试,如下所示:Unit testing 笑话中的嘲弄方法,unit-testing,reactjs,flux,jestjs,Unit Testing,Reactjs,Flux,Jestjs,我有一个非常简单的单元测试,如下所示: import ApiWrapper from '../../services/api_wrapper'; jest.unmock('../helper') describe('Helper', () => { let Helper; beforeEach(() => { Helper = require('../helper').default; }); it('calls the Api
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();
class ApiWrapper {
static help () {
console.log('help!')
}
}
export default ApiWrapper;
其中,帮助程序如下所示:
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();
class ApiWrapper {
static help () {
console.log('help!')
}
}
export default ApiWrapper;
ApiWrapper看起来像这样:
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();
class ApiWrapper {
static help () {
console.log('help!')
}
}
export default ApiWrapper;
ApiWrapper.help()被嘲笑为“救命!”从未打印,但测试中的预期失败。如果我们将ApiWrapper重写为一个普通Javascript对象,则仍然会失败,如下所示:
export default {
help: () => { console.log('help!'); }
}
但是,如果我们在规范中更改导入(因此ApiWrapper在beforeach中导入),并将ApiWrapper重写为一个单例类,则它是有效的,如下所示:
class ApiWrapper {
help() {
console.log('help!');
}
}();
export default new ApiWrapper();
Jest的模仿行为是什么导致了这种情况发生的?如果移动
require('../helper').default代码>在beforeach()之前的之外。
您不需要在每次测试之前初始化它。但是,我会将ApiWrapper.help.mockClear()
放在beforeach()
中以重置模拟调用。如果移动require('../helper')。默认值代码>在beforeach()之前的之外。
您不需要在每次测试之前初始化它。但是,我会将ApiWrapper.help.mockClear()
放在beforeach()
中以重置模拟调用。此问题所在线程中的更多信息:此问题所在线程中的更多信息: