【发布时间】:2018-10-04 18:37:19
【问题描述】:
在我的 node/typescript express 应用程序中,我将配置设置存储在settings.json 文件中,该文件由config.ts 作为对象加载和导出。每个使用配置设置的模块都像这样导入模块:
import Config from './config';
config.ts 看起来像这样(在此示例中进行了简化):
class Config {
public static get(): any {
const settings = require('settings.json');
return settings;
}
}
export default Config.get();
当应用程序运行时,这一切正常。但是我的摩卡咖啡测试有问题。在某些测试中,我想在触发应用功能之前更改配置设置(例如Config.someSetting = 'someValue'),然后在运行下一个测试之前将配置设置重置为默认值。
我知道我可以手动将每个更改的配置值重置为默认值,但理想情况下我想“重新导入”config.ts 模块,它将所有配置设置重置为默认值。我的问题是最好的方法是什么?
我尝试使用decache 并将以下内容添加到afterEach:
decache('./config');
尽管我可以看到 config.ts 不再在 require 缓存中,但 Config 对象仍然存在,它的所有后续测试的当前值(config.ts 没有被“重新导入”)。
我做错了什么?
【问题讨论】:
-
不确定将测试迁移到 Jest 是否可行,但 Jest 测试框架通过 jest.resetModules 内置了对此的支持:jestjs.io/docs/en/jest-object.html#jestresetmodules
标签: node.js typescript mocha.js