我是Jest的新手,并试图为我现有的React App编写一些单元测试。我有一个全局变量window.CONFIG
,它存储了一些在app中不同位置使用的配置。此变量在登录HTML页面的脚本标记中初始化
现在我正在尝试编写一个辅助函数的测试,该函数依赖于此window.CONFIG
,并且在访问时始终未定义
以下是代码:
config.js
export default window.CONFIG;
应用程序/ helper.js
import config from "../config";
export default {
getCompanyURL(company) {
return config.baseUrl + "/companies/" + company.id;
},
}
_ 测试 _ / helpers-test.js
jest.dontMock('../app/helpers.js');
var helper = require('../app/helpers.js').default;
describe('Get company URL', function() {
it('returns company url with company id appended', function() {
expect(companies.getCompanyURL({id: 1})).toBe('test_base_url/companies/1');
});
});
config
的{{1}}始终未定义。由于未加载浏览器登录页面,因此Get Company Url
未初始化。如何在Jest的单元测试中模拟这个window.CONFIG
模块?
提前致谢!!
答案 0 :(得分:4)
我不确定这是否对您有所帮助,但您可以将全局变量直接放入package.json
"jest":{
"globals": {
"config": {"foo":"bar"}
}
}
答案 1 :(得分:0)
我通过在config.js
目录中创建__mocks__
的手动模拟来解决这个问题,如下所示:
let configMock = jest.genMockFromModule('../config');
let __mockConfig = {};
__mockConfig.baseUrl = "test_base_url/";
configMock = __mockConfig;
export default configMock;