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

Dav*_*ani 8 javascript unit-testing reactjs jestjs react-native

有没有可能使用Jest与多个预设,比如jsdom和react-native?

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

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

无法从'react-native-implementation.js'中找到模块'NetInfo'

当我尝试添加

"jest": {
  "preset": "react-native"
}
Run Code Online (Sandbox Code Playgroud)

to package.json,我得到:

ReferenceError:未定义窗口

Jus*_*ple 19

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


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}`,
  }, 
}
Run Code Online (Sandbox Code Playgroud)


Ily*_*nov 14

预设只是普通的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}`,
    },
})
Run Code Online (Sandbox Code Playgroud)

如果某些选项无法像这样"合并",只需手动处理这些情况.

  • [merge](https://www.npmjs.com/package/merge) 将多个对象合并为一个,可以选择创建一个新的克隆对象。类似于 jQuery.extend 但更灵活。适用于 Node.js 和浏览器。 (2认同)