Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs Jest-测试动态导入失败_Reactjs_Jestjs_Enzyme_Dynamic Import - Fatal编程技术网

Reactjs Jest-测试动态导入失败

Reactjs Jest-测试动态导入失败,reactjs,jestjs,enzyme,dynamic-import,Reactjs,Jestjs,Enzyme,Dynamic Import,我有一个带有动态导入的React组件,还有一个Jest/Enzyme测试,它检查如果其中一个导入错误会发生什么。我遇到了一个问题,Jest因为我抛出的错误而未能通过测试,而且我似乎无法让它通过,即使使用expect().toThrow() 我不确定我应该在这里做什么。。。理想情况下,我希望有一种方式,告诉笑话只是忽略任何错误 内部组件: async componentDidMount() { try { // there are more things in real compone

我有一个带有动态导入的React组件,还有一个Jest/Enzyme测试,它检查如果其中一个导入错误会发生什么。我遇到了一个问题,Jest因为我抛出的错误而未能通过测试,而且我似乎无法让它通过,即使使用
expect().toThrow()

我不确定我应该在这里做什么。。。理想情况下,我希望有一种方式,告诉笑话只是忽略任何错误

内部组件:

async componentDidMount() {
  try {
    // there are more things in real component and so that is why Promise.all
    const [Card] = await Promise.all([
      import(
        /* webpackChunkName:"@Card" */ './index'
      )
    ]);
    this.setState({ Card });
  } catch(e) {
  }
}

render() {
  const { Card } = this.state;
  if (Card) { ... }
  else { ... }
}
测试:

jest.mock('../../card',()=>{
抛出新错误(“强制异步导入错误”);
});
const wrapper=mount();
expect(wrapper.find('Loading').prop('dimensions')).toEqual(props.dimensions));

能否包含整个组件源代码?现在,我看不出你在哪里(或是否)兑现了你的承诺。对不起,我更新了它以显示那里的try/catch。如果我在componentDidMount的catch块中添加console.log,它会记录错误。组件中发生了很多事情,所以我无法真正粘贴整个组件。您是将导入设置为state还是执行其他操作?此外,您的
导入本质上是一个承诺,您将其模拟为只会抛出错误的回调函数。你可以试着创建一个承诺,然后拒绝它,并出现错误。是的,本质上,导入的文件是另一个React组件,它被传递到一个HOC中,然后结果被保存到状态。render函数在状态中检查它,并在它存在时进行渲染-我更新了代码示例,以或多或少地显示我正在执行的任务。经过一些研究,似乎酶不能正确地分解动力学模拟。如果我传递了一个简单的字符串,比如
default:“p”
,那么它将按预期工作(通过返回

组件)。但是,如果我将其包装在
Promise
中,或者在
default
导出中使用
Promise
,则无法解决该问题。这个问题似乎已经被提过好几次了:,您能包括您的整个组件源吗?现在,我看不出你在哪里(或是否)兑现了你的承诺。对不起,我更新了它以显示那里的try/catch。如果我在componentDidMount的catch块中添加console.log,它会记录错误。组件中发生了很多事情,所以我无法真正粘贴整个组件。您是将导入设置为state还是执行其他操作?此外,您的
导入本质上是一个承诺,您将其模拟为只会抛出错误的回调函数。你可以试着创建一个承诺,然后拒绝它,并出现错误。是的,本质上,导入的文件是另一个React组件,它被传递到一个HOC中,然后结果被保存到状态。render函数在状态中检查它,并在它存在时进行渲染-我更新了代码示例,以或多或少地显示我正在执行的任务。经过一些研究,似乎酶不能正确地分解动力学模拟。如果我传递了一个简单的字符串,比如
default:“p”
,那么它将按预期工作(通过返回

组件)。但是,如果我将其包装在
Promise
中,或者在
default
导出中使用
Promise
,则无法解决该问题。这个问题似乎已经被提过好几次了:,而且
jest.mock('../../card', () => {
  throw new Error('Forcing async import error');
});
const wrapper = mount(<MyComp {...props} />);
expect(wrapper.find('Loading').prop('dimensions')).toEqual(props.dimensions);