我有以下 default/config.js 文件
/* eslint-disable @typescript-eslint/no-var-requires */
require('dotenv').config({
path: require('find-config')('.env'),
});
module.exports = {
cronInterval: process.env.CRON_INTERVAL,
queueName: process.env.QUEUE_NAME || '',
isVisible: process.env.IS_VISIBLE
};
在我的 index.ts 中,我有
import config from 'config';
import * as cron from 'node-cron';
const isVisible = config.get<boolean>('isVisible');
const queueName = config.get<string>('queueName');
const cronInterval = config.get<string>('cronInterval');
function startProcess(queueName) {
cron.schedule(cronInterval, () => {});
}
// process starts here
if (isVisible) {
startProcess(queueName);
} else {
logger.info('Wont start')
}
在我的单元测试中,我想测试这两种情况isVisible
,同时保持其他配置值不变。
我试过了
describe.only('isVisible', () => {
beforeEach(() => {
jest.mock('./../config/default.js', () => ({
isVisible: false
}));
})
it('should not run anything if not visible', () => {
require('./../src/index');
const scheduleSpy = jest.spyOn(cron, 'schedule');
expect(scheduleSpy).not.toHaveBeenCalled();
})
})
这对我不起作用,它不会覆盖isVisible
.
我知道我也可以config.get
像这样模拟函数config.get.mockReturnValue(false)
,但这会覆盖cronInterval
andqueueName