Javascript js模拟模块中的方法

Javascript js模拟模块中的方法,javascript,unit-testing,mocking,jestjs,Javascript,Unit Testing,Mocking,Jestjs,我正在用Jest.js测试生成器函数,但我的问题通常是关于模块内的模拟函数 Foo.js有:- const Foo = { callMe() { return true; }, callMe2() { return true; } }; export default Foo; 在Jest测试中,我希望Foo.callMe抛出一个错误,但我无法让它与Jest mock一起工作 import Foo from '../Foo'; it('fails

我正在用Jest.js测试生成器函数,但我的问题通常是关于模块内的模拟函数

Foo.js有:-

const Foo = {
   callMe() { 
     return true;
   },
   callMe2() {
     return true;
   }
};
export default Foo;
在Jest测试中,我希望
Foo.callMe
抛出一个错误,但我无法让它与Jest mock一起工作

import Foo from '../Foo';

it('fails my generator function', () => {
  const gen = myGenFunction();
  expect(gen.next().value).toEqual(call(Foo.callMe));
});
生成器函数如下所示:

export function* myGenFunction(action) { 
  try {
    const response = yield call(Foo.callMe);
    console.log('Success');
  } catch(err) {
    console.log('Error!!!');
  } finally {
    // do something else
  }
}

如何使
Foo.callMe
抛出错误?我尝试了一些方法,但到目前为止没有任何效果。

通过使用redux saga的投掷方法,我成功地实现了我想要的

it('fails my generator function', () => {
  const error = { message: 'Look see here, an error' };

  const gen = myGenFunction();
  ...

  expect(gen.throw(error).value).toEqual(
      put(actions.setIsLoading(false)), // action that happens on fail
      'gen should yield an Effect put(actions.setIsLoading(false))'
  );
});
这里有很好的文档记录: