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

Posted

技术标签:

【中文标题】是否可以同时使用具有多个预设的 Jest?【英文标题】:Is it possible to use Jest with multiple presets at the same time? 【发布时间】:2018-12-02 18:55:54 【问题描述】:

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

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

当我运行一些测试时,开玩笑的回答:

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

当我尝试添加时

"jest": 
  "preset": "react-native"

到 package.json,我得到:

ReferenceError: 未定义窗口

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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


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

【讨论】:

【参考方案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`,
    ,
)

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

【讨论】:

merge 将多个对象合并为一个,可选择创建一个新的克隆对象。类似于 jQuery.extend 但更灵活。在 Node.js 和浏览器中工作。

以上是关于是否可以同时使用具有多个预设的 Jest?的主要内容,如果未能解决你的问题,请参考以下文章

玩笑配置错误:“未找到预设 @shelf/jest-mongodb。”

开玩笑:找不到相对于目录的预设“@babel/env”

Unity3d学习 预设体(prefab)的一些理解

AEJoy —— 如何使用 AE 中的表达式控件预设

AEJoy —— 如何使用 AE 中的表达式控件预设

Webpack 热模块替换不适用于 babel-loader 和预设 es2015