React-testing-library 未从样式表渲染计算样式

2024-04-18

基本场景是这样的:我有一个组件width: 100%正如样式表中所定义的。因此它应该保留其父组件的宽度。我想计算组件的宽度并将其应用到我的子组件,因为我通过渲染它createPortal我希望它们的宽度相同。这在浏览器中有效。然而,在我的测试中,我发现window.getComputedStyle(component)不返回从样式表应用的任何样式。

正如所建议的,我可以模拟 javascript 窗口,但这实际上与我希望做的事情相反,我认为。我想验证浏览器中存在的行为window.getComputedStyle()返回所有应用的样式,而不仅仅是内联样式。

我在codesandbox中放入了一个简单的例子:https://codesandbox.io/s/goofy-wilson-6v4dp https://codesandbox.io/s/goofy-wilson-6v4dp

也在这里:

function App() {
  return (
    <div className="App">
      <WidthComponent />
    </div>
  ) 
}

function WidthComponent() {
  const myInput = useRef();
  const [inputWidth, setInputWidth] = useState(0);

  useEffect(() => {
    console.log("in handleLoad");
    const width = myInput.current ? myInput.current.offsetWidth : 0;
    setInputWidth(width);
  }, [myInput]);

  return (
    <div className="inherited-width" ref={myInput}>
      <div style={{ width: inputWidth }} className="child-element">
        Hello
      </div>
    </div>
  );
}

// test
test("width is inherited", () => {
  const { rerender } = render(
    <div style={{ width: "452px" }}>
      <WidthComponent />
    </div>
  );
  const element = document.getElementsByClassName("child-element").item(0);
  rerender(
    <div style={{ width: "452px" }}>
      <WidthComponent />
    </div>
  );
  expect(window.getComputedStyle(element).width).toBe("452px");
});
.App {
  font-family: sans-serif;
  text-align: center;
  width: 500px;
}

.inherited-width {
  width: inherit;
}

任何帮助表示赞赏。


但是,在我的测试中,我发现 window.getCompulatedStyle(component) 没有返回从样式表应用的任何样式。

请注意,如果您在 JSDOM 中运行测试(即每个 Jest 测试),则 CSS 并未完全实现。具体来说,CSS的级联部分没有实现(https://github.com/jsdom/jsdom/pull/2690 https://github.com/jsdom/jsdom/pull/2690)。继承仅部分实现(display and visibility) (https://github.com/jsdom/jsdom/issues/2160 https://github.com/jsdom/jsdom/issues/2160).

我建议仅在浏览器中运行对计算样式进行断言的测试,而不是在 JSDOM 中。 Codesandbox 测试未在实际的浏览器环境中运行。

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

React-testing-library 未从样式表渲染计算样式 的相关文章

随机推荐

  • 从 ViewPager 中删除由 FragmentStatePagerAdapter 填充的所有片段

    我有一个 ViewPager 我使用 FragmentStatePagerAdapter 填充片段 代表 arrayListOfObjects 中的对象 一切正常 mMyFragmentPagerAdapter new fragmentAd
  • 更少的 css 编译器。无法使用变暗属性

    我正在开发一个项目 使用 LESS 作为我的 CSS 编译器 我已经有一个完全工作的循环 可以正确设置背景颜色 我的问题是这样的 使用我当前的代码 当我尝试使用 darken 属性时 编译结果是这样的 SyntaxError 错误评估函数d
  • 我应该使用哪个功能接口?

    我正在学习编写一些 lambda 表示形式功能接口 https docs oracle com en java javase 11 docs api java base java lang FunctionalInterface html
  • UIView 的 viewDidLoad 吗?

    是什么viewDidLoad for UIView 我有一个UIView与 xib 一起 我想在加载时隐藏它的子视图之一 我尝试使用这个 id initWithCoder NSCoder aDecoder theView hidden YE
  • 使用 Json.NET 反序列化空数组

    我有一个使用 Json NET v7 0 1 的 C 应用程序 作为 REST 调用的结果 我以以下形式返回一些 JSON messages phoneNumber 123 456 7890 smsText abcd1234 phoneNu
  • 如何使用 Jquery 更改辅助样式表?

    我的网站上有我的 base css 和 red css 我喜欢在按下某个按钮时将 red css 更改为 blue css 而不丢失 base css 如何执行此操作 我试过这个
  • Dataframe 根据其他列创建新列

    我有一个数据框 df lt data frame a c 1 2 3 4 5 b c 1 20 3 4 50 df a b 1 1 1 2 2 20 3 3 3 4 4 4 5 5 50 我想根据现有列创建一个新列 像这样的事情 if df
  • for 语句后的大括号

    我是新手 编写一个代码来打印从 1 到 10 的数字之和 事情是这样的 for a 1 a lt 10 a sum a cout lt
  • excel函数“R中决策函数的搜索

    我有一个问题 R中是否可以实现excel函数 决策搜索 R中有没有函数或者需要在R中创建一个脚本 需要结合以下方程来求解X值得到 1 126 作为结果 1 126 X X 0 2 EXP X 0 2 1 您可以使用以下方法找到该方程的解un
  • .vimrc 控制键映射不起作用

    我的 vimrc 中有以下映射 用于映射控制键 1 2 3 用于切换选项卡 我在 ubuntu 11 10 中使用 gnome 终端 控制键映射似乎不起作用 谁能告诉我我做错了什么 VIM Vi 改进版 7 3 154 map
  • 如何在不关闭vim的情况下重置vim的设置(包括插件,.vimrc文件)?

    我已经使用 vim 两年了 我使用 pathogen 进行插件管理 我在寻找 一种在不关闭 vim 的情况下重置所有 vim 设置 包括插件 vimrc 文件 的方法 是 有什么想法吗 PS 在某些情况下 重新加载 vimrc 与重新打开
  • Android 在其他设备上共享显示

    我正在努力与通过 WiFi 连接的多个表 全部有根 共享平板电脑显示屏 我正在使用以下方法 全部在一个线程内 1 我截屏 Process sh Runtime getRuntime exec su null null OutputStrea
  • 涵盖 .NET 中的 TDD、DDD 和设计模式的书籍

    我想要一本能够真正让我全面了解使用 C TDD ASP NET MVC DDD 和设计模式 例如存储库模式 的现代 ASP NET 开发的书 我非常擅长 C 和 ASP NET MVC 但想填补空白 如果您对涵盖这些主题的一两本书有很好的体
  • 如何更改 graphviz 的默认字体大小?

    我使用 doxygen graphviz 来记录我的代码 graphviz 在生成图像方面做得很好 有什么方法可以更改 graphviz 的默认字体大小吗 默认值为 14 但我想使用 12 更改单个元素 例如节点 子图 边缘等 的字体大小确
  • 具有重复参数(可变参数)的磁铁模式

    是否可以使用磁铁图案 http spray io blog 2012 12 13 the magnet pattern 与可变参数 object Values implicit def fromInt x Int Values implic
  • getattr/setattr/hasattr/delattr 线程安全吗?

    看这个单例实现 if not hasattr Singleton instance with Singleton instance lock if not hasattr Singleton instance Singleton insta
  • Maven 父项目自动化

    我有这个结构 child C 家长 A child B 如果我尝试在没有父级的情况下安装子级 B maven 会抛出一个错误 我知道按照惯例我应该将父级安装在我的存储库中 但是有没有办法让某人拉取子级并在安装过程中安装自动父辈 编辑 我要尽
  • 链接器如何处理跨翻译单元的相同模板实例化?

    假设我有两个翻译单元 foo cpp void foo auto v std vector
  • ant、jar 文件和类路径哦天哪

    我正在尝试重新构建我的构建技术来创建依赖于常见的第 3 方 jar 文件的 Java jar 文件 GlazedLists Apache Commons 等 我一直将它们全部放入 Java JRE dir lib ext 中 这样 JRE
  • React-testing-library 未从样式表渲染计算样式

    基本场景是这样的 我有一个组件width 100 正如样式表中所定义的 因此它应该保留其父组件的宽度 我想计算组件的宽度并将其应用到我的子组件 因为我通过渲染它createPortal我希望它们的宽度相同 这在浏览器中有效 然而 在我的测试