我想模拟这个,所以我只模拟 Bar 的 get() 返回方法,所以当 Foo 调用 find() 时,get() 被模拟并返回。
条形文件
// bar file
function Bar(){
function get(){
//...
}
return {
get
}
}
export default Bar;
Foo 文件
// foo file
import Bar from './bar';
function Foo(func){
const bar = Bar();
function find(){
bar.get();
}
return {
find,
};
}
export default Foo
索引.js
// index.js
import Bar from './bar';
import Foo from './foo';
export {Bar, Foo};
我的测试
//foo test
import {Bar, Foo} from './index'
//This mocks everything
jest.mock('./index');
// This will say Cannot find module Bar
jest.mock('Bar', () => ({
get: () => jest.fn().mockReturnValue('test'),
}));
describe('test foo', ()=> {
let foor = Foo();
foo.find();
})
我尝试嘲笑酒吧本身,它说"找不到模块栏">
如何模拟 Bar 作为工厂函数?
假设你把foo.js
,bar.js
放在文件夹中,例如:'common',并有如下文件index.js
,你可以这样写。 由于我们想根据您添加的代码片段模拟Bar
,因此它应该返回一个function
,该调用时返回一个object
,该具有get
属性的值为function
。确保在模拟时,因为它不是任何第三方库,因此在这种情况下,我们提供我们正在模拟的文件的相对路径,它是./common/bar
//bar.js
function Bar(){
function get(){}
return {
get
}
}
export default Bar;
//foo.js
import Bar from './bar';
function Foo(func){
const bar = Bar();
function find(){
return bar.get(); //Note the return
}
return {
find,
};
}
export default Foo
//index.js
import Bar from './bar';
import Foo from './foo';
export {Bar, Foo};
//app.test.js
import { Foo } from './common'
jest.mock('./common/bar', () => (function(){
return(
{
get: jest.fn().mockReturnValue('test') //Note this
}
)
}));
describe("Foo function", () => {
it("Should call and return correct value", () => {
let foor = Foo();
expect(foor.find()).toEqual("test");
});
});