Jest模拟导入函数的返回值

3xiyfsfu  于 2022-12-08  发布在  Jest
关注(0)|答案(2)|浏览(203)

很明显,我在这里误解了一些关于笑话如何运作的东西:要测试的代码:

const target = () => {
  if (filter()) () => 'hi';
}

const filter = () => false;

module.exports = {
  target, filter
}

在下面的代码中,我希望filter()的值为true,这样当下面的代码调用target时,target返回hi。这可能吗?如果可能,如何模拟/测试?如果不可能,如何模拟/测试?

const index = require('./index')
jest.mock('./index.js', () => {
 const o = jest.requireActual('./index.js')
 return {
   ...o,   filter: jest.fn(() => true)
 }
});

test('test', () => {
  const x = index.target();  
  console.log(index.filter())  // true
  console.log(x) // undefined ~ would like to see it return 'hi' instead
});
wb1gzix0

wb1gzix01#

你的模仿起作用了。
target()中,您不返回任何内容,但是() => 'hi'过于复杂。

const target = () => {
  if (filter()) return 'hi';    // no need for a function here
}
8yparm6h

8yparm6h2#

我认为在index.js中,目标函数必须返回值。请看下面的代码。

const target = () => {
  if (filter()) return () => 'hi'; //more exactly return (()=>"hi")()
  else return () => 'no'
}

const filter = () => false;

module.exports = {
  target, filter
}

并在测试文件中,重新定义目标函数。

const index = require('./index')
    jest.mock('./index.js', () => {
     const o = jest.requireActual('./index.js')
     const filter = jest.fn(() => true)
     const target = jest.fn(()=>{
        if(filter()) return (()=>"hi")();
     })
     return {
       ...o,   
       filter,
       target
     }
    });
    
    test('test', () => {
      const x = index.target();  
      console.log(index.filter())  // true
      console.log(x) 
    });

相关问题