Files
dingtalk-bot/tests/helpers/env-mock.js

112 lines
2.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 环境变量 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);
}