添加并执行脚本react测试库和jest



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

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

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测试库jest-test中运行?

我通过在一个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。请参阅关于执行脚本的jsdom文档。

您可以在您的jest配置中设置这些选项(假设是jsdom环境(:

testEnvironment: 'jsdom',
testEnvironmentOptions: {
resources: 'usable',
runScripts: 'dangerously',
},

请参阅关于执行脚本的jsdom文档和关于配置测试环境的jest文档。

最新更新