使用Jest手动模拟React-Intl进行快照测试

阿尔伯特·奥利维(AlbertOlivé)

我一直在Jest努力模拟React-Intl库因为在运行测试时遇到此错误:

Invariant Violation: [React Intl] Could not find required `intl` object. <IntlProvider> needs to exist in the component ancestry.

文档说,我们必须在根项目中创建一个名为的文件夹__Mocks__,然后添加此文件:

// ./__mocks__/react-intl.js
import React from 'react';
const Intl = require.requireActual('react-intl');

// Here goes intl context injected into component, feel free to extend
const intl = {
  formatMessage: ({defaultMessage}) => defaultMessage
};

Intl.injectIntl = (Node) => (props) => <Node {...props} intl={intl}/>;

module.exports = Intl;

但是什么也没发生。

阿尔伯特·奥利维(AlbertOlivé)

经过几个小时的研究,我发现我需要更改的是我要求react-intl包装的方式。因此,我更改了这一行:

const Intl = require.requireActual('react-intl');

对此:

const Intl = jest.genMockFromModule('react-intl');

因此,最终文件如下所示:

import React from 'react';
const Intl = jest.genMockFromModule('react-intl'); // <-- This is the change

const intl = {
  formatMessage: ({defaultMessage}) => defaultMessage
};

Intl.injectIntl = (Node) => (props) => <Node {...props} intl={intl}/>;

module.exports = Intl;

希望这可以帮助!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用GCC和手动Makefile进行增量构建?

使用嵌入式库进行xcode测试时,手动签名失败。可以分解吗?

gRPC的Jest模拟失败,并带有手动定义

如何手动使Espresso测试失败

猫鼬文档:手动执行挂钩进行测试

使用Vue-Router进行快照测试

手动模拟不适用于Jest

手动测试Ruby CLI

使用react-test-renderer进行快照测试

在嵌套的反应导航组件上使用Jest进行快照测试-对象键更改,因此快照匹配失败

手动填充Django的modelformset以进行测试

如何在测试中手动模拟Svg?

手动进行交叉验证

如何使用preact进行手动代码拆分?

是否在nunit测试中进行手动交互?

用Jest进行快照测试,子组件如何从父组件调用函数?

如何使用react-testing-library对进行异步数据加载的组件进行快照测试?

无法手动进行MySQL安装

使用Xcode手动配置单元测试

如何使用手动启动的现有Firefox实例来使用Selenium WebDriver进行测试?

使用WebSocket手动连接到socket.io 1.x,进行容量测试

如何使用PHP cURL手动进行“表单提交”?

与通过Web门户进行手动快照相比,使用Endpoint Storage的SL api createSnapshot需要更长的时间?

使用Crypto ++手动进行CBC加密处理

使用发布或快照存储库进行手动部署,具体取决于项目版本

使用 Jest 对 ChartJS 组件进行快照测试

如何使用 jest 和酶导入带有模拟数据的手动模拟模块?

使用快照进行反应测试

使用 webpack 模块手动测试