gpt4 book ai didi

javascript - 创建 React 应用程序 - 无法在测试运行前设置窗口对象

转载 作者:行者123 更新时间:2023-12-05 07:07:37 24 4
gpt4 key购买 nike

尝试为 CRA 生成的应用程序中的组件设置一些测试。

由于导入的文件依赖于未初始化的窗口对象,导致测试无法运行。

快速概览:在 public/index.html 中,窗口上定义了一个名为 window.config 的对象。

<script src="%PUBLIC_URL%/config.js"></script>
<script>
// THESE PROPERTIES ARE DEFINED IN config.js
window.config = {
ENV,
IDENTITY_URL,
OIDC_CLIENT_ID,
};
</script>

有一个名为 identity.constants.js 的文件导出了一个使用这些窗口变量的对象。

export const IdentityConfig = {
authority: window.config.IDENTITY_URL,
client_id: window.config.OIDC_CLIENT_ID,
... etc
};

我正在尝试测试的组件导入了另一个依赖于上面所示的 identity.constants.js 的组件。

问题是测试无法启动并抛出错误,说明 window.config is undefined from the identity.constants.js文件。

阅读 CRA 文档后,我尝试将以下代码添加到 src/setupTests.js 以在测试开始之前设置配置对象,但似乎在这段代码运行之前就失败了。

global.config = {
ENV: "development",
IDENTITY_URL: "identityurl.com",
OIDC_CLIENT_ID: "i-am-a-clientId",
... etc
};

我正在寻找一种在测试运行之前设置此窗口变量的方法(或者一种更好的方法来构建我使用窗口变量的方式),以便我可以成功运行我的测试。

最佳答案

globa.config定义了一个名为config的全局变量,你需要先定义global.window,然后添加 config 作为 global.window 的属性。看来你的测试环境是 node,如果你有 jsdom 作为你项目的 devDependencies,尝试将下面的代码添加到你的 setupTests.js:

import { JSDOM } from 'jsdom';

const jsdom = new JSDOM('<!doctype html><html><body></body></html>');
global.window = jsdom.window;
global.document = jsdom.window.document;

global.window.config = {
ENV: "development",
IDENTITY_URL: "identityurl.com",
OIDC_CLIENT_ID: "i-am-a-clientId",
... etc
};

如果没有 jsdom,一个简单的修复如下:

global.window = {
config: {
ENV: "development",
IDENTITY_URL: "identityurl.com",
OIDC_CLIENT_ID: "i-am-a-clientId",
... etc
}
}

关于javascript - 创建 React 应用程序 - 无法在测试运行前设置窗口对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62068350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com