javascript - 在 React with Jest 中为 @material-ui withStyles 创建手动模拟
问题描述
我正在尝试为模块创建手动@material-ui/core/styles
模拟,该模块导出名为withStyles
.
使用内联模拟jest.mock
可以完美地工作,但是当我尝试将此逻辑移动到可共享__mocks__
文件夹中时,它不再起作用了。
我从正在测试的文件中删除了所有不必要的代码,只保留了创建问题的两行:
import { withStyles } from '@material-ui/core/styles';
console.log('loaded styles:', withStyles);
export default 'hello';
并且测试也简化了,只是为了看看模拟是否工作,如下:
import test from '../test';
console.log(test);
我尝试的是__mocks__
在项目的根目录中创建一个文件夹,我有该node_modules
文件夹。
在那里我创建了一个名为的第一个文件夹@material-ui
,并在其中创建了另一个名为core
. 在此文件夹中,我有一个styles.js
使用以下代码调用的文件:
export const withStyles = 'hello world';
所以结构看起来像:
- __mocks__
- @material-ui
- core
- styles.js
- node_modules
这是有效的代码,在同一测试文件中定义了模拟:
jest.mock('@material-ui/core/styles', () => ({
withStyles: () => Component => props => (
<Component
classes=""
{...props}
/>
),
}));
文件夹发生的事情__mocks__
是,如果我不调用任何
jest.mock('@material-ui/core/styles');
在我的测试文件中,它使用了真正的withStyles
,所以真正的模块。根本没有使用任何模拟。
如果我使用:
jest.mock('@material-ui/core/styles');
它使用由 jest 自动生成的自动模拟(或者看起来如此),跳过了我在上面定义的模拟。
只是关于软件包的说明,我用于CRA
引导应用程序,jest
我目前拥有的版本是 20,react-scripts
版本为 1.0.17
感谢大家的帮助!
解决方案
我在我的项目中创建了文件src/__mocks__/@material-ui/core/styles.jsx
,并在里面放了:
import * as Styles from '@material-ui/core/styles';
import React from 'react';
const withStyles = () => Component => props => <Component classes={{}} {...props} />;
module.exports = { ...Styles, withStyles };
推荐阅读
- java - Github API:从同一组织下的现有仓库创建新仓库
- linux - :不是一个有效的标识符 bash 出口说
- angular - Angular:使用搜索选择下拉(Mat-Select)并填写数据库。初始值问题
- javascript - 如何让 svg 图像仅在 div 标签内完全移动?
- r - 有条件地预测 R 中各个日期(取决于降雨量)的每日观察量
- angular - Angular:当 API 使用 Angular 给出错误消息时如何控制台错误消息
- c# - 将 AWS CodeArtifact CredentialProvider 与 .Net Core 一起使用 - 由于找不到指定的命令或文件,因此无法执行
- html-table - 引导表因超过 1,000 行而失败
- docusignapi - DocuSign 在使用 POST 请求发送信封时添加自定义电子邮件消息、主题和语言
- r - 即使支持,Stargazer 也无法识别 tobit