是否可以同时使用带有多个预设的 Jest?

IT技术 javascript reactjs unit-testing react-native jestjs
2021-05-07 16:52:58

是否可以将 Jest 与多个预设一起使用,比如 jsdom 和 react-native?

我想测试一个可以在 Web 和 React Native 环境中工作的 React 组件。问题是该组件可能使用 React Native 库或某些文档的方法。

当我运行一些测试时,jest 回复:

无法从“react-native-implementation.js”中找到module“NetInfo”

当我尝试添加

"jest": {
  "preset": "react-native"
}

到 package.json,我得到:

参考错误:窗口未定义

3个回答

预设只是普通的 Javascript 对象,因此在许多情况下您可以简单地合并它们。例如,这就是我如何能够ts-jestjest-puppeteer同步:

const merge = require('merge')
const ts_preset = require('ts-jest/jest-preset')
const puppeteer_preset = require('jest-puppeteer/jest-preset')

module.exports = merge.recursive(ts_preset, puppeteer_preset, {
    globals: {
        test_url: `http://${process.env.HOST || '127.0.0.1'}:${process.env.PORT || 3000}`,
    },
})

如果某些选项不能像这样“合并”,只需手动处理这些情况。

同样,您可以使用扩展运算符执行此操作:


const tsPreset = require('ts-jest/jest-preset')
const puppeteerPreset = require('jest-puppeteer/jest-preset')

module.exports = {
  ...tsPreset,
  ...puppeteerPreset,
  globals: {
    test_url: `http://${process.env.HOST||'127.0.0.1'}:${process.env.PORT||3000}`,
  }, 
}

对于正在寻找一个预设和 typeScript 的人

const { defaults: tsjPreset } = require('ts-jest/presets')

module.exports = merge.recursive(ts_preset, puppeteer_preset, {
    preset: 'Your_Preset',
    transform: tsjPreset.transform,
    },
})