Jest.js 如何更改全局变量以覆盖所有分支

tyu7yeag  于 2023-02-17  发布在  Jest
关注(0)|答案(1)|浏览(168)

// target.js
const urlPrefix = IS_TEST_ENV || _DEV_ ? 'https://xxx/cms/media/' : 'https://zzz/cms/media/';

const formatImageSizeUrl = (url, size) => {
  if (!/\d+x\d+/.test(size)) {
    return url;
  }
  if (url.startsWith(urlPrefix)) {
    return `${url}?d=${size}`;
  }
  return url;
};
...

// jest.config.js
module.exports = {
 globals: {
  IS_TEST_ENV: true,
  _DEV_: true
 }
}

如何将IS_TEST_ENV和 DEV 更改为falsetemporarily.so可以覆盖所有分支

mqkwyuun

mqkwyuun1#

我的观点是,您的代码中有一些逻辑需要模拟,但这些逻辑是隐式的,目前还不能模拟。

// settings.js
// Check whether we are on a production environment or not
export const isProd = () => !(IS_TEST_ENV || _DEV_)

// target.js
// Reversed order of URLs as the boolean expression returns true if we are in production
const urlPrefix = isProd() ? 'https://zzz/cms/media/' : 'https://xxx/cms/media/';

// target.test.js
// Mock out isProd() to return true, as by default it will be false
jest.mock('../settings', () => {
  isProd: () => true
})

// Run test to ensure we are getting the right URL

这种方法的好处是,你有一个单一的规范源来判断你是否在生产中,如果你最终需要在多个地方进行检查,这是很有用的。如果你想在未来改变这种行为,你也只需要模拟或更新一个方法。

相关问题