angular - 如何使用 Testing-Library、Jest 和 JSDOM 测试自定义元素/Web 组件?

标签 angular jestjs testing-library angular-testing-library

我正在尝试使用 testing-library/angular@11jest@27.4.4 来测试 Angular 应用程序,它大量使用自定义元素。

不幸的是,我不太确定 testing-library/JSDOM/Jest 是否不支持自定义元素的呈现,或者我是否遗漏了什么。我们使用的 stylelib 是用 stencil 构建的,没有使用 shadow-dom。

带有自定义元素的示例模板:

<div>
  <my-custom-element title="some-title"></my-custom-element>
</div>

呈现的自定义元素模板示例(在本例中仅呈现带有提供的 title-prop 的按钮)

<my-custom-element title="some-title">
  <button>some-title</button>
</my-custom-element>

如果我运行 testing-libraryrender() 函数并打印 screen,自定义元素标签就会被渲染,但它的子组件不是:

<head>
  ...
</head>
<body>
  ...
  <div>
    <my-custom-element title="some-title"></my-custom-element>
  </div>
</body>

因此,如果我运行 expect(screen.getByRole("button")).toBeTruthy(),测试将失败。

有一个开放的 shadow-dom 支持拉取请求:https://github.com/testing-library/dom-testing-library/pull/1069https://dev.to/ionic/testing-web-components-in-react-4e49提示目前无法测试 CE...

我是不是漏掉了什么,还是在浪费时间?在这种情况下,我认为它也没有测试实现细节,因为在大多数情况下我只想检查文本是否呈现在屏幕上。

最佳答案

您的网络组件未定义,这就是为什么只呈现标签而不是其内容的原因。 您应该在测试设置中捆绑并加载所有 Web 组件(所有测试的包装器)。

关于angular - 如何使用 Testing-Library、Jest 和 JSDOM 测试自定义元素/Web 组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70770810/

相关文章:

angular - Angular 2.0 中的变更检测

angular - 使用 NGX 和状态管理打开模式

Angular 4 是真正在核心模块单例中提供的服务吗?

javascript - testing-library/react 如何在动态生成错误消息时测试无效输入

javascript - 如何使用 react native 测试库查询具有特定文本的按钮

angular - Angular N-声明常量文件的最佳实践是什么?

javascript - 如何测试内部函数是否已从导入函数调用? (与 Jest.js)

react-native - React Native 测试失败,缺少 babel 转换

jestjs - Jest 测试失败 -> 测试套件无法运行 : �PNG SyntaxError: Invalid or unexpected token

reactjs - React testing-library 在进行新的调用之前一定要等待之前的 act() 调用