如何在reactjs中使用jest和enzyme来测试媒体查询CSS是否适用于屏幕调整大小时的元素

2023-12-21

我正在尝试使用笑话和酶来测试我在reactjs中构建的应用程序的响应能力。我怎样才能做到这一点?

我有一个侧边栏,当屏幕尺寸小于或等于 1024px 时,侧边栏会向左过渡并消失。我经历过这个——弄清楚如何模拟反应组件测试的窗口大小变化 https://stackoverflow.com/questions/45868042/figuring-out-how-to-mock-the-window-size-changing-for-a-react-component-teststackoverflow 问题来模拟/模拟屏幕大小调整。然后我尝试使用 getComputedStyle 等 DOM 函数来查看过渡的 css 规则是否应用于侧栏。但我找不到我应用的变换规则。当我选择侧边栏,将其存储为全局元素并在浏览器控制台中对其执行 getCompulatedStyle 时,它​​起作用了。我究竟做错了什么?

test.ts

describe('App', () => {

  let mountedApp: any;
  const props: RouteComponentProps = {
   ...
  } as RouteComponentProps;

  const initialState = {
    ...
  };

  // Function that returns a new App mounted
  const newApp = ((route: string) => {
    if (!mountedApp) {
      props.location.pathname = route;
      mountedApp = mount(
        <MemoryRouter initialEntries={[route]}>
          <Provider store={configureStore([thunk])(initialState)}>
            <App {...props} />
          </Provider>
        </MemoryRouter>,
        { attachTo: document.body }
      );
    }
    return mountedApp;
  });

  it('Expect the side bar to disappear and menu icon to appear for smaller screen size', () => {
    const wrapper = newApp('/');
    let container = wrapper.find(NavDrawer).find(Drawer);
    expect(container.props().classes.paper).toEqual('nav-drawer-paper drawer-close');
    Object.defineProperty(window, 'innerWidth', {writable: true, configurable: true, value: 1024});
    window.dispatchEvent(new Event('resize'));
    // expect(container.find(Drawer)).toHaveStyleRule('transform', 'translate3d(-240px, 0, 0)');
    let element = container.getDOMNode().children[0];
    let HTMLElement = document.getElementsByClassName('drawer-close')[0];
    console.log('dom element', window.getComputedStyle(HTMLElement));
    console.log('element style', window.getComputedStyle(element));
  });
});

NavDrawer是我编写的组件,里面使用了material ui Drawer组件。我向该组件应用了样式。

NavDrawer.ts

class NavDrawer extends React.Component {
  render() {
    return (
      <Drawer
        className='nav-drawer'
        variant='permanent'
        anchor='left'
        classes={{paper: `nav-drawer-paper${this.props.isDrawerClose ? ' drawer-close' : ''}`}}
      >
        ...
        ...
      </Drawer>
    );
  }
}

当侧栏消失时,我在顶部栏上显示菜单图标。通过单击它,用户可以在较小的屏幕中打开或关闭侧边栏。this.props.isDrawerClose表示抽屉是否被用户打开。这是true默认情况下。

无风格

.nav-drawer {
  width: 240px;
  z-index: 1295;
  flex-shrink: 0;
  .nav-drawer-paper {
    border-right-width: 0;
    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15);
    padding-top: 68px;
    width: 240px;
    transition: all 300ms ease;
    transform: translate3d(0, 0, 0);      
  }  
}

@media screen and (max-width: 1024px){
  .nav-drawer {
    .nav-drawer-paper {
      box-shadow: 0 0 10px rgba(51, 51, 51, 0.38);
    }
    .drawer-close {
      transition: all 300ms ease;
      transform: translate3d(-240px, 0, 0);
    }
  }
}

我发现了一个叫做toHaveStyleRule但我无法使用它(您可以在 test.ts 文件中看到它的注释),因为它给出了 tslint 错误Property 'toHaveStyleRule' does not exist on type 'Matchers<any>'

我还尝试使用 web dom api 来获取元素并检查样式,就像在浏览器控制台中所做的那样,但仍然无法正常工作。最初的document.getElementsByClassName返回一个空数组。所以我提到this https://stackoverflow.com/questions/43694975/jest-enzyme-using-mount-document-getelementbyid-returns-null-on-componenstackoverflow 问题并添加{ attachTo: document.body }安装中的选项。我可以检索 DOM 元素,但无法获得与浏览器中相同的结果。

在浏览器中,以下是我所做的和得到的。

I did

ele = document.getElementsByClassName('drawer-close')[0]
window.getComputedStyle(ele).transform

这给了"matrix(1, 0, 0, 1, 0, 0)"

将屏幕大小调整到小于 1024px 后,它给出了"matrix(1, 0, 0, 1, -240, 0)"

我预计浏览器中也会发生同样的情况,但当我控制台 computerStyle.transform 时,它给出了一个空字符串。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在reactjs中使用jest和enzyme来测试媒体查询CSS是否适用于屏幕调整大小时的元素 的相关文章

随机推荐

  • SQLAlchemy 和多数据库

    我有各种类似 但不相同 的数据库 并且想使用 SQLAlchemy 作为 标准化 访问的方式 数据库可能略有不同 例如列名上有唯一的前缀 或者它们可能有更大的差异并且缺少列 或者对于旧数据库 缺少整个表 我寻求帮助的与其说是 SQLAlch
  • 有水平的 UIRefreshControl 吗?

    你可以加UIRefreshControl to UICollectionView 或任何UIScrollView就此而言 将其添加到集合的子视图中 https stackoverflow com a 12502450 458193 UIRe
  • 为什么 Android 丢弃 TCP 数据包发生在 droid 5.x 中,而不是 4.x 中?

    我有一部 Android 智能手机 通过 WIFI 连接到嵌入式 AP 我正在使用 Linux 上运行 Tshark 的笔记本电脑嗅探 WIFI 流量 我每 100 毫秒传输小 234 字节 TCP 数据包 5 次 然后是 500 毫秒 没
  • 根据列中的条件将值分配给组

    我有一个如下所示的数据框 gt df data frame group c 1 1 1 2 2 2 3 3 3 date c 1 2 3 4 5 6 7 8 9 value c 3 4 3 4 5 6 6 4 9 gt df group d
  • 在 Windows 7 中找不到 IIS 服务

    当我进入 Windows 7 中的 Windows 服务窗口 开始 gt 管理工具 gt 服务 时 我找不到列出的 IIS 服务 我错过了什么吗 我只想重新启动服务 我有 IIS 管理器并且可以打开它 非常感谢任何帮助 谢谢 它被称为Wor
  • 如何在 Angular 的 HttpClient 中使用 reportProgress? [复制]

    这个问题在这里已经有答案了 我正在使用下载文件HTTP POST方法 我想调用另一种方法向最终用户显示下载进度 直到文件下载完成 如何使用reportProgress in HttpClient为了这 downfile file any O
  • WSL 下的 NFS 客户端 - mount.nfs:没有此类设备

    我在尝试挂 载 nfs 导出时收到以下错误 sudo mount 192 168 1 175 mnt nas mnt c nas mount nfs No such device 有想法该怎么解决这个吗 截至 2020 年 10 月 您可以
  • 如何将动画固定到位置?

    我尝试为 1 秒后修复的 DIV 制作动画 但我做不到 我希望一秒钟后名为 homepage hero module 的 div 从右向左滑动 正如您在 FIDDLE 中看到的那样 它在一秒钟后变为固定 那么如何制作动画呢 我尝试使用 cs
  • 如何在网格上添加自定义按钮并传递行值?

    我想向网格添加一个按钮 以便用户可以通过传入按钮行中的值来查看给定任务的时间表条目值 网格加载得很好 直到我将按钮添加到 columnCfgs 当按钮在那里时 我收到 Uncaught TypeError Object object Obj
  • JavaFX:如何刷新表?

    我在 JavaFX TableView 中刷新行样式时遇到问题 java版本 1 8 0 51 Java TM SE 运行时环境 版本 1 8 0 51 b16 Java HotSpot TM 服务器 VM 内部版本 25 51 b03 混
  • 如何使用 .NET Framework 3.5 中的数据注释对 C# 类进行属性验证?

    NET Framework 中是否有一种方法可以将某个方法或验证器传递给其类装饰的对象实例数据注释 http msdn microsoft com en us library system componentmodel dataannota
  • 如何提高 boost::spirit::x3 键值解析器的性能

    我正在使用以下方法解析键值对 类似于 HTTP 标头 boost spirit x3 当与我的手写解析器进行性能比较时 boost spirit x3比这慢大约 10 我正在使用 boost 1 61 和 GCC 6 1 g std c 1
  • Odata查询不会扩展

    我正在使用如下网址查询我的服务 http a com 3080 odata DiscussionVM 6 http a com 3080 odata DiscussionVM 6 expand 部分 用户 在控制器方法上 EnableQue
  • oracle中如何计算范围

    我有一个定义范围的表 例如 START END MAP 1 10 A 11 15 B 我如何查询该表 结果将是 ID MAP 1 A 2 A 3 A 4 A 5 A 6 A 7 A 8 A 9 A 10 A 11 B 12 B 13 B 1
  • Web 服务可以返回流吗?

    我一直在编写一个小应用程序 可以让人们向我上传和下载文件 我已经向此应用程序添加了一个 Web 服务 以这种方式提供上传 下载功能 但我不太确定我的实现将如何处理大文件 目前上传和下载方法的定义如下 使用 Apache CXF 编写 boo
  • Google Drive API (PHP):某些文件缺少父引用

    我仍在学习 Google Drive API 的细节 我正在尝试为其创建一个文件浏览器 以分层结构显示项目 而不是显示列出的所有文件 无论其父级如何 我遇到的问题是有些文件的父数组为空 最初的想法是 它应该显示根目录中存在的所有文件 并且仅
  • Tensorflow获取范围内的所有变量

    我在一定范围内创建了一些变量 如下所示 with tf variable scope my scope createSomeVariables 然后我想获取 my scope 中所有变量的列表 以便我可以将其传递给优化器 这样做的正确方法是
  • 需要帮助理解 SELECT ... FOR UPDATE 导致死锁的行为

    我有两个并发事务执行这段代码 为了说明目的而进行了简化 Transactional public void deleteAccounts List
  • Sqlalchemy 选择前事件

    我正在使用 SQL Alchemy 在 SQLA 执行 select 语句之前我需要做一些工作 所以我发现最好的方法是使用 SQLA Event 但我找不到合适的 before select 事件 它在那里吗 但我不善于找到 如果它不存在
  • 如何在reactjs中使用jest和enzyme来测试媒体查询CSS是否适用于屏幕调整大小时的元素

    我正在尝试使用笑话和酶来测试我在reactjs中构建的应用程序的响应能力 我怎样才能做到这一点 我有一个侧边栏 当屏幕尺寸小于或等于 1024px 时 侧边栏会向左过渡并消失 我经历过这个 弄清楚如何模拟反应组件测试的窗口大小变化 http