112 lines
2.4 KiB
JavaScript
112 lines
2.4 KiB
JavaScript
/**
|
||
* 环境变量 Mock 工具
|
||
* 用于在测试中模拟和管理环境变量
|
||
*/
|
||
|
||
/**
|
||
* Mock 环境变量
|
||
*
|
||
* @param {object} envVars - 要设置的环境变量
|
||
* @returns {Function} 恢复函数
|
||
*/
|
||
export function mockEnvVars(envVars) {
|
||
const originalEnv = {};
|
||
|
||
// 保存原始值
|
||
for (const key in envVars) {
|
||
originalEnv[key] = process.env[key];
|
||
process.env[key] = envVars[key];
|
||
}
|
||
|
||
// 返回恢复函数
|
||
return () => {
|
||
for (const key in envVars) {
|
||
if (originalEnv[key] === undefined) {
|
||
delete process.env[key];
|
||
} else {
|
||
process.env[key] = originalEnv[key];
|
||
}
|
||
}
|
||
};
|
||
}
|
||
|
||
/**
|
||
* 创建标准的 Action 环境变量
|
||
*
|
||
* @param {object} overrides - 覆盖的环境变量
|
||
* @returns {object} 环境变量对象
|
||
*/
|
||
export function createActionEnv(overrides = {}) {
|
||
return {
|
||
INPUT_WEBHOOK_URL: 'https://oapi.dingtalk.com/robot/send?access_token=test123',
|
||
INPUT_MESSAGE_TYPE: 'text',
|
||
INPUT_CONTENT: 'Test message',
|
||
INPUT_TITLE: '',
|
||
INPUT_AT_MOBILES: '',
|
||
INPUT_AT_ALL: 'false',
|
||
INPUT_LINK_URL: '',
|
||
INPUT_PIC_URL: '',
|
||
INPUT_BTN_ORIENTATION: '0',
|
||
INPUT_SINGLE_TITLE: '',
|
||
INPUT_SINGLE_URL: '',
|
||
INPUT_BUTTONS: '',
|
||
INPUT_FEED_LINKS: '',
|
||
...overrides,
|
||
};
|
||
}
|
||
|
||
/**
|
||
* 清理所有 INPUT_ 开头的环境变量
|
||
*
|
||
* @returns {Function} 恢复函数
|
||
*/
|
||
export function clearActionEnv() {
|
||
const originalEnv = {};
|
||
const inputKeys = Object.keys(process.env).filter(key => key.startsWith('INPUT_'));
|
||
|
||
inputKeys.forEach(key => {
|
||
originalEnv[key] = process.env[key];
|
||
delete process.env[key];
|
||
});
|
||
|
||
return () => {
|
||
Object.assign(process.env, originalEnv);
|
||
};
|
||
}
|
||
|
||
/**
|
||
* 创建测试用的环境变量快照
|
||
*
|
||
* @returns {object} 当前环境变量的副本
|
||
*/
|
||
export function createEnvSnapshot() {
|
||
return { ...process.env };
|
||
}
|
||
|
||
/**
|
||
* 恢复环境变量到指定快照
|
||
*
|
||
* @param {object} snapshot - 环境变量快照
|
||
*/
|
||
export function restoreEnvSnapshot(snapshot) {
|
||
// 清除当前环境变量
|
||
for (const key in process.env) {
|
||
if (!(key in snapshot)) {
|
||
delete process.env[key];
|
||
}
|
||
}
|
||
|
||
// 恢复快照中的环境变量
|
||
Object.assign(process.env, snapshot);
|
||
}
|
||
|
||
/**
|
||
* 创建环境变量 Mock(别名函数)
|
||
*
|
||
* @param {object} envVars - 要设置的环境变量
|
||
* @returns {Function} 恢复函数
|
||
*/
|
||
export function createEnvMock(envVars) {
|
||
return mockEnvVars(envVars);
|
||
}
|