Javascript 可以同时使用多个预设的Jest吗?

Javascript 可以同时使用多个预设的Jest吗?,javascript,reactjs,unit-testing,react-native,jestjs,Javascript,Reactjs,Unit Testing,React Native,Jestjs,是否可以将Jest与多个预设一起使用,比如jsdom和react native 我想测试一个React组件,它既可以在Web上工作,也可以在React本机环境中工作。问题是组件可能使用React本机库或某些文档的方法 当我运行一些测试时,jest回答: 无法从“react native implementation.js”中找到模块“NetInfo” 当我尝试添加 "jest": { "preset": "react-native" } 对于package.json,我得到: Refere

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

我想测试一个React组件,它既可以在Web上工作,也可以在React本机环境中工作。问题是组件可能使用React本机库或某些文档的方法

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

无法从“react native implementation.js”中找到模块“NetInfo”

当我尝试添加

"jest": {
  "preset": "react-native"
}
对于package.json,我得到:

ReferenceError:未定义窗口


预设只是普通的Javascript对象,因此在许多情况下,您可以简单地合并它们。例如,我就是这样同时启用
ts jest
jest木偶演员的:

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}`,
    },
})

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

按照同样的思路,您可以使用spread操作符执行此操作:


常量tsPreset=require('ts-jest/jest preset')
const PUPPETERPRESET=require('jest-PUPPETER/jest preset')
module.exports={
…tsPreset,
…木偶演员,
全球:{
test_url:`http://${process.env.HOST | | |'127.0.0.1'}:${process.env.PORT | | 3000}`,
}, 
}

适用于正在寻找一个预设加类型脚本的用户

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

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

为了完整性,您能否精确说明什么是
'merge'
包?将多个对象合并为一个对象,可以选择创建一个新的克隆对象。与jQuery.extend类似,但更灵活。适用于Node.js和browser.js,适用于我!四氢呋喃