jest模拟依赖生成器函数

时间:2017-04-05 17:02:18

标签: jestjs babel-jest

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

//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()
  })
})

永远不会调用哪些错误作为执行,但是当我在actualFunction中控制日志时,看到执行被调用。

1 个答案:

答案 0 :(得分:0)

问题是,开玩笑不知道你在测试的某个地方使用了诺言。您要么使用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()
})
相关问题