试图为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
文件中的undefined
为identity.constants.js
。
阅读CRA文档之后,我尝试在测试开始之前将以下代码添加到src/setupTests.js
中以设置配置对象,但在运行此代码之前似乎失败。
global.config = {
ENV: "development",
IDENTITY_URL: "identityurl.com",
OIDC_CLIENT_ID: "i-am-a-clientId",
... etc
};
我正在寻找一种在测试运行之前设置此窗口变量的方法(或者一种更好的方式来构造我使用窗口变量的方法,以便我可以成功地运行测试。
似乎您的测试环境为node
,请尝试在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
};