reactjs - 添加并执行脚本 react-testing-library 和 jest

标签 reactjs jestjs react-testing-library

我们通过 <script> 引入了自定义 Assets 找到 html 标签并呈现组件的标签。例如,我们有 <customABC /> .当页面加载脚本时,找到 <customABC />并返回该组件应该是什么。

在调用渲染之前,我正在尝试通过以下方式将脚本添加到我的文档中。

  describe('DisclaimerContainer render tests', () => {
  test('simple Disclaimer renders disclaimer content', () => {

    const moduleScript = document.createElement('script');
    moduleScript.src = "https://www.example.com/assets/foo/bar/5.7.0/components.js";
    moduleScript.type = "module";
    moduleScript.async = true;
    document.body.appendChild(moduleScript); //I've also tried document.head.appendChild(moduleScript);
    const {debug} = render(<ContextDisclaimerContainer history={history}/>);
    debug();
  });

Debug() 仍然显示 <customABC />而不是它应该显示的 html。

当您没有 npm 包并且需要包含自定义脚本时,您如何配置它们以在您的 react-testing-library jest 测试中运行?

最佳答案

我通过在 jest 安装文件中自定义 JSDOM 成功加载了脚本:

// jest.config.js
module.exports = {
  setupFilesAfterEnv: [
    './jest-setup.js',
  ],
};


// jest-setup.js
import { JSDOM } from 'jsdom';
    
const dom = new JSDOM(<!DOCTYPE html><body></body>, {
  resources: 'usable',
  runScripts: 'dangerously',
});

global.window = dom.window;
global.document = dom.window.document;

关键是用 { resources: 'usable', runScripts: 'dangerously' } 配置 JSDOM。请参阅 executing scripts 上的 jsdom 文档.

关于reactjs - 添加并执行脚本 react-testing-library 和 jest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60535438/

相关文章:

javascript - React 和 Webpack : Loading failed for the &lt;script&gt; with source http://localhost:8080/app/bundle. js

javascript - 如何修复我的 React-Redux 应用程序中的错误 : "You must pass a component to the function returned by connect. Instead received {}",?

javascript - 将通用组件或组件作为属性进行 react

reactjs - 使用 Jest 和 Enzyme 测试基于 ContextAPI 数据的组件的条件渲染

redux - 用于测试的 Jest describe 不是一个函数

reactjs - 如何在react-testing-library中测试父子关系?

javascript - 内部组件无法正确渲染

css - 如何使用 react-testing-library 测试 React 组件的 css 属性?

reactjs - Ant Design 和 React 测试库

node.js - 服务器实例, Jest 和 'listen EADDRINUSE:::3000'