【问题标题】:jest mock dependency generator function笑话模拟依赖生成器函数
【发布时间】:2017-04-05 17:02:18
【问题描述】:

我无法模拟一个简单的依赖生成器函数。

//generatorFunction.js
export default ()=>({execute: (arg1)=>Promise.resolve(arg1)})

//actualFunction.js
import generate from 'generatorFunction'
export default (arg1)=>generate(arg1)

//actualFunction.test.js
import actualFunction from './actualFunction'
import generatorFunction from './generatorFunction'
const resultingGeneratedFunction = generatorFunction();

jest.mock('generatorFunction', ()=>jest.fn(()=>({execute: ()=>Promise.resolve()})))
it('calls generateFunction', function(done){
  actualFunction(1).then(()=>{
   expect(resultingGeneratedFunction.execute).toHaveBeenCalledOnce()
   done()
  })
})

从不调用执行时出现的错误,尽管当我在实际函数中的控制台日志中看到调用了执行。

【问题讨论】:

    标签: jestjs babel-jest


    【解决方案1】:

    问题是开玩笑不能知道你在测试中的某个地方使用了 Promise。您要么使用async/await 回报承诺。看看docs

    import actualFunction from './actualFunction'
    import generate from 'generatorFunction'
    
    jest.mock('generatorFunction', ()=>jest.fn(()=>({execute: ()=>Promise.resolve()})))
    it('calls generateFunction', function(){
      return actualFunction(1).then(()=>{
       expect(generateFunction.execute).toHaveBeenCalledOnce()
      })
    })
    
    import actualFunction from './actualFunction'
    import generate from 'generatorFunction'
    
    jest.mock('generatorFunction', ()=>jest.fn(()=>({execute: ()=>Promise.resolve()})))
    it('calls generateFunction', async function(){
      const value = await actualFunction(1)
      expect(generateFunction.execute).toHaveBeenCalledOnce()
    })
    

    【讨论】:

    • 我没有意识到你必须返回承诺,但这仍然没有意义。在您提供的示例中, generateFunction 来自哪里?我意识到我没有在问题中提供该上下文并现在添加它
    • 抱歉,您也必须导入它们。导入的版本就是模拟的版本,您可以对其进行测试。更新了我的答案。
    • 对不起,生成器函数的问题是它必须生成自己的实例,我认为这就是混乱的地方。如果你正在导入。如果您仔细查看示例,导入的 generatorFunction 然后会创建 generateFunction。我真的应该更清楚我的问题,我现在就改变它
    猜你喜欢
    • 2021-05-22
    • 2018-10-08
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 2021-10-18
    相关资源
    最近更新 更多