【问题标题】:Jest mock the return value of an imported function开玩笑模拟导入函数的返回值
【发布时间】:2022-10-24 07:57:30
【问题描述】:

显然,我在这里误解了开玩笑的工作原理: 要测试的代码:

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
});

【问题讨论】:

    标签: jestjs


    【解决方案1】:

    你的模拟正在工作。

    target() 中,您没有返回任何内容,但() => 'hi' 过于复杂。

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

    【讨论】:

      【解决方案2】:

      我认为在 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) 
          });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-17
        • 1970-01-01
        • 2021-10-16
        • 1970-01-01
        • 2020-05-27
        • 1970-01-01
        • 1970-01-01
        • 2022-12-10
        相关资源
        最近更新 更多