Jest单元测试中的全局变量

时间:2016-02-17 07:57:13

标签: unit-testing global-variables jestjs

我是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模块?

提前致谢!!

2 个答案:

答案 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;