从命名导出中开玩笑模拟工厂函数



我想模拟这个,所以我只模拟 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.jsbar.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");
});
});

相关内容

  • 没有找到相关文章

最新更新