创建 React 应用程序 - 在测试运行之前无法设置 window 对象
Create React App - Unable to set window object before test runs
正在尝试为 CRA 生成的应用程序中的组件设置一些测试。
由于导入的文件依赖于未初始化的 window 对象,导致测试失败 运行。
快速概览:
在 public/index.html
中,在 window 上定义了一个名为 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
的文件导出了一个使用这些 window 变量的对象。
export const IdentityConfig = {
authority: window.config.IDENTITY_URL,
client_id: window.config.OIDC_CLIENT_ID,
... etc
};
我正在尝试测试的组件导入了另一个依赖于上面显示的 identity.constants.js
的组件。
问题是测试无法启动并抛出错误,指出 window.config
是来自 identity.constants.js
文件的 undefined
。
阅读 CRA 文档后,我尝试将以下代码添加到 src/setupTests.js
以在测试开始前设置配置对象,但似乎在此代码 运行s 之前失败。
global.config = {
ENV: "development",
IDENTITY_URL: "identityurl.com",
OIDC_CLIENT_ID: "i-am-a-clientId",
... etc
};
我正在寻找一种在测试 运行 之前设置此 window 变量的方法(或者一种更好的方法来构建我使用 window 变量的方式)所以我可以成功 运行 我的测试。
globa.config
定义了一个名为config
的全局变量,需要先定义global.window
,然后添加config
作为属性的global.window
。
看来你的测试环境是node
,如果你有jsdom
作为你项目的devDependencies
,试着在你的setupTests.js
:[=22=中添加下面的代码]
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
}
}
正在尝试为 CRA 生成的应用程序中的组件设置一些测试。
由于导入的文件依赖于未初始化的 window 对象,导致测试失败 运行。
快速概览:
在 public/index.html
中,在 window 上定义了一个名为 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
的文件导出了一个使用这些 window 变量的对象。
export const IdentityConfig = {
authority: window.config.IDENTITY_URL,
client_id: window.config.OIDC_CLIENT_ID,
... etc
};
我正在尝试测试的组件导入了另一个依赖于上面显示的 identity.constants.js
的组件。
问题是测试无法启动并抛出错误,指出 window.config
是来自 identity.constants.js
文件的 undefined
。
阅读 CRA 文档后,我尝试将以下代码添加到 src/setupTests.js
以在测试开始前设置配置对象,但似乎在此代码 运行s 之前失败。
global.config = {
ENV: "development",
IDENTITY_URL: "identityurl.com",
OIDC_CLIENT_ID: "i-am-a-clientId",
... etc
};
我正在寻找一种在测试 运行 之前设置此 window 变量的方法(或者一种更好的方法来构建我使用 window 变量的方式)所以我可以成功 运行 我的测试。
globa.config
定义了一个名为config
的全局变量,需要先定义global.window
,然后添加config
作为属性的global.window
。
看来你的测试环境是node
,如果你有jsdom
作为你项目的devDependencies
,试着在你的setupTests.js
:[=22=中添加下面的代码]
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
}
}