跳到主要内容
版本:27.2

配置笑话

Jest的配置可以在<密码>package.json您的项目文件,或通过<密码>jest.config.js或<密码>jest.config.ts文件或通过<密码>--配置<路径/to/file.js | ts | cjs | mjs | json>选项。如果你想用你的<密码>package.json来存储Jest的配置<密码>“开玩笑”应在顶级使用键,所以Jest将知道如何找到您的设置:

{
“姓名” : “我的项目” ,
“开玩笑” : {
“verbose” : 真的
}
}

或通过JavaScript:

/ / jest.config.js
//同步对象
/ ** @type {导入('@ jest / types')。config.initialoptions} * /
常量 配置 = {
verb : 真的 ,
} ;
单元 出口 = 配置 ;
//或异步函数
单元 出口 = 异步的 ( ) => {
返回 {
verb : 真的 ,
} ;
} ;

或通过类型签字(如果<密码>ts-node安装):

// jest.config.ts.
进口 类型 { 配置 } '@ jest / types' ;
//同步对象
常量 配置 : 配置 初始选项 = {
verb : 真的 ,
} ;
出口 默认的 配置 ;
//或异步函数
出口 默认的 异步的 ( ) : 许诺 < 配置 初始选项 > => {
返回 {
verb : 真的 ,
} ;
} ;

请记住,生成的配置必须是JSON-Serializable。

使用时<密码>--配置选项,JSON文件不得包含“jest”键:

{
“保释” : 1. ,
“verbose” : 真的
}

选项#

这些选项让您控制jest在您的行为<密码>package.json文件Jest的理念是在默认情况下工作得很好,但有时您只需要更多的配置功能。

默认值#

如果需要的话,你可以获取Jest的默认选项来扩展它们:

/ / jest.config.js
常量 { 默认值 } = 要求 ( “jest-config” ) ;
单元 出口 = {
/ /……
moduleFileExtensions : [ ... 默认值 moduleFileExtensions , “ts” , 'tsx' ] ,
/ /……
} ;

参考#

automock[布尔]#

默认:<密码>错误的

这个选项告诉Jest,测试中所有导入的模块都应该自动模拟。测试中使用的所有模块都将有一个替换实现,以保持API的外观。

例子:

//utils.js
出口 默认的 {
批准 : ( ) => {
返回 “令牌” ;
} ,
isa授权 : 秘密 => 秘密 ===. “向导” ,
} ;
//____tests__/automocking.test.js.
进口 乌提尔斯 “../utils” ;
测试 ( '如果UTIL自动模拟' , ( ) => {
//“utils”的公共方法现在是模拟函数
预计 ( 乌提尔斯 批准 模拟 ) 托贝特鲁西 ( ) ;
预计 ( 乌提尔斯 isa授权 模拟 ) 托贝特鲁西 ( ) ;
//你可以提供你自己的实现
//或通过预期的返回值
乌提尔斯 批准 mockReturnValue ( “mocked_token” ) ;
乌提尔斯 isa授权 mockReturnValue ( 真的 ) ;
预计 ( 乌提尔斯 批准 ( ) ) 成为 ( “mocked_token” ) ;
预计 ( 乌提尔斯 isa授权 ( “not_wizard” ) ) 托贝特鲁西 ( ) ;
} ) ;

注意:当你有一个手动模拟时,Node模块会被自动模拟(例如:<密码>__mocks__/lodash.js)。更多信息在这里.

注意:核心模块,如<密码>FS.,默认情况下不会嘲笑。它们可以明确地嘲笑,就像<密码>开玩笑.模拟(FS.)

保释(号码|布尔)#

默认:<密码>0

默认情况下,Jest在完成后运行所有测试并在控制台中生成所有错误。可以在此处使用Bail配置选项以在此之后具有Jest停止运行测试<密码>N失败。保释<密码>真的与将保释金设定为<密码>1.。

cacheDirectory(字符串)#

默认:<密码>“/ tmp / <路径>”

Jest应该在其中存储其缓存依赖项信息的目录。

Jest尝试扫描依赖关系树一次(预先)并缓存它,以减轻运行测试时需要进行的一些文件系统扫描。此配置选项允许您自定义Jest在磁盘上缓存数据的存储位置。

clearMocks[布尔]#

默认:<密码>错误的

在每次测试之前自动清除模拟调用和实例。相当于呼叫<密码>笑话.ClearAllMocks()每次测试前。这不会删除可能已提供的任何模拟实现。

收集保险[布尔]#

默认:<密码>错误的

指示是否应该在执行测试时收集覆盖率信息。因为这将使用覆盖率收集语句对所有执行的文件进行更新,所以可能会显著降低测试速度。

收藏[阵列]#

默认:<密码>未定义的

一系列一团模式指示应该为其收集覆盖率信息的一组文件。如果一个文件与指定的glob模式匹配,即使这个文件不存在测试,并且测试套件中也不需要它,也会为它收集覆盖率信息。

例子:

{
“collectCoverageFrom” : [
“** / *。{JS,JSX}” ,
"!* * / node_modules / * *” ,
"!* * /供应商/ * *”
]
}

这将收集项目中所有文件的覆盖率信息<密码>rootDir,匹配的除外<密码>* * / node_modules / * *或<密码>**/小贩/**

注意:每个Glob模式按配置顺序应用它们。(例如<密码>[“!**/\\\\\\\\\\\/**”,“***/**.js”]不会排除<密码>__测验__因为否定被第二个模式覆盖了。为了在这个例子中使负的glob工作,它必须在后面<密码>** / *。js.)

注意:此选项需要<密码>收集保险设置为true或使用Jest调用<密码>--覆盖范围

亚搏取款帮助:如果您看到覆盖率输出,例如。。。
====================================================覆盖范围摘要===============================
声明:未知% (0/0)
分支机构:未知%(0/0)
功能:未知%(0/0)
行:未知% (0/0)
================================================================================
Jest:找不到全局的覆盖率数据。

很可能您的glob模式不匹配任何文件。指的是微匹配保证您的Globs兼容的文档。

coverageDirectory(字符串)#

默认:<密码>未定义的

Jest应在其中输出其覆盖率文件的目录。

coveragePathIgnorePatterns(数组<字符串>)#

默认:<密码>[“/node_modules/”]

在执行测试之前,与所有文件路径匹配的regexp模式字符串数组。如果文件路径匹配任何模式,覆盖信息将被跳过。

这些模式字符串与完整路径匹配。使用<密码>字符串标记,包括项目根目录的路径,以防止它意外忽略可能具有不同根目录的不同环境中的所有文件。例子:<密码>[" < rootDir > /构建/”,“< rootDir > / node_modules /”)

coverageProvider(字符串)#

表示哪些提供商应该用于介绍覆盖的仪器代码。允许值为<密码>巴别塔(默认)或<密码>v8

注意,使用<密码>v8这被认为是实验性的。这使用了V8的内置代码覆盖率,而不是基于Babel的覆盖率。它没有经过很好的测试,在Node的最近几个版本中也有所改进。使用node的最新版本(撰写本文时为v14)将产生更好的结果。

隐蔽的人力(<字符串数组|[字符串,选项]>]#

默认:<密码>[“JSON”,“LCOV”,“文本”,“Clover”]

Jest在撰写报道时使用的记者姓名列表。有吗伊斯坦布尔的记者可以使用。

注意:设置此选项会覆盖默认值。添加<密码>“文本”或<密码>“文本摘要”在控制台输出中查看覆盖率摘要。

注意:您可以使用tuple表单将其他选项传递给istanbul记者。例如:

[ “json” , [ “lcov” , { “projectRoot” : “. . / . . /” } ] ]

有关您可以参考选项对象形状的其他信息<密码>CoverageReporterWithOptions输入类型定义.

覆盖率阈值(对象)#

默认:<密码>未定义的

这将用于配置覆盖率结果的最小阈值实施。阈值可以指定为<密码>全球的,作为一个glob,并作为目录或文件路径。如果不满足阈值,jest将失败。指定为正数的阈值被视为所需的最小百分比。指定为负数的阈值表示允许的未覆盖实体的最大数量。

例如,如果分支、行和函数的覆盖率低于80%,或者如果有10个以上未覆盖的语句,则使用以下配置jest将失败:

{
...
“开玩笑” : {
“覆盖率阈值” : {
“全球的” : {
“分支机构” : 80 ,
“功能” : 80 ,
“行” : 80 ,
“声明” : -10
}
}
}
}

如果旁边指定了Globs或Paths<密码>全球的,将从总覆盖率中减去匹配路径的覆盖率数据,并单独应用阈值。全局阈值应用于与全局匹配的所有文件。如果找不到路径指定的文件,则返回错误。

例如,使用以下配置:

{
...
“开玩笑” : {
“覆盖率阈值” : {
“全球的” : {
“分支机构” : 50 ,
“功能” : 50 ,
“行” : 50 ,
“声明” : 50
} ,
“/src/components/” : {
“分支机构” : 40 ,
“声明” : 40
} ,
“./src/reducers/**/*.js” : {
“声明” : 90
} ,
“./src/api/very-important-module.js” : {
“分支机构” : 100 ,
“功能” : 100 ,
“行” : 100 ,
“声明” : 100
}
}
}
}

jest将失败,如果:

  • 这个<密码>/src /组件目录具有少于40%的分支或声明覆盖范围。
  • 其中一个匹配的文件<密码>。/src /reducers/**/*.js.Glob的报表覆盖率不到90%。
  • 这个<密码>。/src /A.pi/very-important-module.js文件的覆盖率低于100%。
  • 每一个剩余文件的覆盖率都不到50%(<密码>全球的)。

依赖提取器(字符串)#

默认:<密码>未定义的

此选项允许使用自定义依赖性提取器。它必须是一个节点模块,该节点模块将对象导出<密码>提取作用例如。:

常量 加密 = 要求 ( 'crypto' ) ;
常量 FS. = 要求 ( “fs” ) ;
单元 出口 = {
提取 ( 密码 , 文件路径 , defaultExtract ) {
常量 副总裁 = defaultExtract ( 密码 , 文件路径 ) ;
//扫描文件并在`deps`中添加依赖项(这是一个`set`)
返回 副总裁 ;
} ,
getCacheKey ( ) {
返回 加密
createHash ( 'md5' )
更新 ( FS. readFileSync ( __文档名称 ) )
消化 ( 十六进制的 ) ;
} ,
} ;

这个<密码>提取函数应该返回易于迭代(<密码>数组,<密码>放,等等)中找到的依赖项。

该模块还可以包含<密码>getCacheKey函数生成一个缓存键,以确定逻辑是否已更改,并且应丢弃依赖它的任何缓存工件。

显示名称[字符串,对象]#

默认:<密码>未定义的

允许在测试运行时将标签打印在测试旁边。这在可以有许多jest配置文件的多项目存储库中变得更有用。这可以直观地告诉测试属于哪个项目。以下是示例有效值。

单元 出口 = {
显示名称 : “客户” ,
} ;

单元 出口 = {
显示名称 : {
的名字 : “客户” ,
颜色 : “蓝色” ,
} ,
} ;

作为辅助选项,具有以下属性的对象<密码>的名字和<密码>颜色可以通过。这允许对displayName的背景颜色进行自定义配置。<密码>显示名称当它的值是字符串时,默认为白色。Jest利用粉笔因此,粉笔支持的所有有效颜色选项也都受jest支持。

errorOnDeprecated[布尔]#

默认:<密码>错误的

使调用弃用API掷出有用的错误消息。亚搏取款有助于缓解升级过程。

扩展到reatasesm(数组<字符串>)#

默认:<密码>[]

Jest将运行<密码>。mjs和<密码>。js最近的文件<密码>package.jsons<密码>类型字段设置为<密码>单元ECMAScript模块。如果您有任何其他应该使用本机ESM运行的文件,您需要在这里指定它们的文件扩展名。

注意:Jest的ESM支持仍处于试验阶段有关更多yabo2013详细信息,请参阅其文档.

{
...
“开玩笑” : {
“extensionsToTreatAsEsm” : [ “.ts” ]
}
}

extraGlobals(数组<字符串>)#

默认:<密码>未定义的

测试文件运行在虚拟机,这会减慢对全局上下文属性的调用(例如:<密码>数学)。使用此选项,您可以指定要在vm内定义的额外属性,以加快查找速度。

例如,如果您的测试调用<密码>数学通常,您可以通过设置传递它<密码>extraGlobals

{
...
“开玩笑” : {
“extraGlobals” : [ “数学” ]
}
}

forcecoveragematch.(数组<字符串>)#

默认:<密码>['']

通常从收集代码覆盖范围内忽略测试文件。使用此选项,您可以覆盖此行为,并在代码覆盖范围内忽略其他忽略的文件。

例如,如果在名为的源文件中有测试<密码>。js.扩展:

//sum.t.js
出口 函数 总和 ( A. , B ) {
返回 A. + B ;
}
如果 ( 过程 环境 节点环境 ===. “测试” ) {
测试 ( '和' , ( ) => {
预计 ( 总和 ( 1. , 2. ) ) 成为 ( 3. ) ;
} ) ;
}

您可以使用设置从这些文件中收集覆盖率<密码>forcecoveragematch.

{
...
“开玩笑” : {
“forcecoveragematch” : [ “* * / * .t.js” ]
}
}

全局变量(对象)#

默认:<密码>{}

一组需要在所有测试环境中可用的全局变量。

例如,以下内容将创建一个全局<密码>__发展__变量设置为<密码>真的在所有测试环境中:

{
...
“开玩笑” : {
“全球” : {
“__dev__” : 真的
}
}
}

请注意,如果您在这里指定了一个全局引用值(如对象或数组),而某些代码在运行测试期间更改了该值,则该更改将会发生在其他测试文件的测试运行中保持。此外,<密码>全局变量对象必须是json可序列化的,因此不能用于指定全局函数<密码>设置文件

globalSetup(字符串)#

默认:<密码>未定义的

此选项允许使用自定义全局设置模块,该模块导出一个异步函数,该函数在所有测试套件之前触发一次<密码>globalConfig对象作为参数。

注意:只有在项目中运行至少一个测试时,才会触发在项目中配置的全局设置模块(使用多项目运行器)。

注意:通过定义的任何全局变量<密码>globalSetup只能在中读取<密码>全球减速.您无法检索在测试套件中定义的全局。

注意:当代码转换应用于链接的安装文件时,Jest将在中转换任何代码<密码>Node_modules.。这是由于需要加载实际变压器(例如:。<密码>巴别塔或<密码>类型签字)执行转换。

例子:

// setup.js.
单元 出口 = 异步的 ( ) => {
/ /……
//设置mongod的引用,以便在拆卸时关闭服务器。
全球的 __MONGOD__ = 蒙多 ;
} ;
/ / teardown.js
单元 出口 = 异步的 函数 ( ) {
等待 全球的 __MONGOD__ 停止 ( ) ;
} ;

全球减速(字符串)#

默认:<密码>未定义的

该选项允许使用自定义全局teardown模块,该模块导出一个在所有测试套件之后触发一次的异步函数。这个函数得到Jest的<密码>globalConfig对象作为参数。

注意:只有从该项目运行至少一个测试时,才会触发在项目中配置的全局拆卸模块(使用多项目运行器)。

注:关于的转换同样需要注意<密码>Node_modules.至于<密码>globalSetup适用于<密码>全球减速

匆忙(对象)#

默认:<密码>未定义的

这将用于配置的行为<密码>快马加鞭地图,Jest的内部文件爬虫/缓存系统。支持以下选项:

类型 HasteConfig = {
/**是否使用SHA-1散列文件*/
computha1. ? : 布尔值 ;
/**要用作默认值的平台,例如“ios”*/
defaultPlatform ? : 字符串 | 空值 ;
/**强制使用节点的'fs'API,而不是进行“查找”*/
forcenodefilesystemapi. ? : 布尔值 ;
/ **
*爬行文件时是否遵循符号链接。
*此选项不能用于使用watchman的项目。
*如果此选项设置为true,则使用`watchman`的项目设置为true将会错误。
*/
everyMymlinks. ? : 布尔值 ;
/**自定义的Haste实现路径。*/
哈斯特模块路径 ? : 字符串 ;
/**所有目标平台,例如['ios'、'android']*/
平台 ? : 数组 < 字符串 > ;
/**是否在模块冲突时抛出错误。*/
throwOnModuleCollision ? : 布尔值 ;
/ **自定义Hastemap模块* /
Hastemapmodulepath. ? : 字符串 ;
} ;

injectGlobals[布尔]#

默认:<密码>真的

插入Jest的globals(<密码>预计,<密码>测试,<密码>描述,<密码>之前等)进入全球环境。如果您将此设置为<密码>错误的,你应该导入<密码>@jest /全局,如。

进口 { 预计 , 开玩笑 , 测试 } “@jest/globals” ;
开玩笑 useFakeTimers ( ) ;
测试 ( 一些测试的 , ( ) => {
预计 ( 日期 现在 ( ) ) 成为 ( 0 ) ;
} ) ;

注意:仅使用默认值支持此选项<密码>玩笑马戏团.测试赛跑者

maxConcurrency[数字]#

默认:<密码>5.。

限制使用时允许在使用时运行的测试数量的数字<密码>test.concurrent.一旦插槽被释放,任何超过这个限制的测试都将被排队并执行。

maxWorkers[数字|字符串]#

指定工作池将用于运行测试的最大工人数。在单个运行模式下,默认为主线程的机器上可用的核心数量。在Watch模式中,这默认为机器上的一半可用核心,以确保Jest无法引起的并且不会将您的机器磨损到停止。在像CIS这样的资源有限环境中调整它可能是有用的,但默认值应该适用于大多数使用情况。

对于可用可变CPU的环境,您可以使用基于百分比的配置:<密码>“maxWorkers”:“50%”

模块目录(数组<字符串>)#

默认:<密码>[" node_modules "]

从所需模块的位置递归向上搜索的目录名称数组。设置此选项将覆盖如果仍要搜索,则为默认值<密码>Node_modules.包装包含它以及任何其他选项:<密码>[“节点单元”、“bower单元组件”]

moduleFileExtensions(数组<字符串>)#

默认:<密码>["js", "jsx", "ts", "tsx", "json", "node"]

文件扩展阵列您的模块使用。如果您需要模块而不指定文件扩展,则这些是Jest将在左右订单中查找的扩展名。

我们建议将项目中最常用的扩展放在左边,所以如果你使用的是TypeScript,你可能会考虑将"ts"和/或"tsx"移到数组的开头。

模块映射器[对象]#

默认:<密码>空值

从正则表达式到模块名或模块名数组的映射,允许在单个模块中删除资源,如图像或样式。

默认情况下,无论是否启用自动模拟,映射到别名的模块都将解除锁定。

用<密码>要引用的字符串标记rootDir值,如果要使用文件路径。

此外,您可以使用编号的反向引用替换捕获的正则表达式组。

例子:

{
“modulenamapper” : {
“^image![a-zA-Z0-9$\-]+$” : “GlobalImageStub” ,
“^[./a-zA-Z0-9$\-]+\\.png$” : /RelativeImageStub.js” ,
“模块名称(.*)” : “< rootDir > / substituted_module_ js 1.美元” ,
“资产/(. *)” : [
/图像/ $ 1” ,
“< rootDir > /照片/ 1美元” ,
/ /食谱/ 1美元”
]
}
}

定义映射的顺序很重要。图案被一个一个地检查,直到一个适合。首先应该列出最具体的规则。对于模块名称数组也是如此。

注意:如果你提供的模块名没有边界<密码>^$这可能会导致难以发现错误。例如。<密码>中继将替换包含以下内容的所有模块:<密码>中继作为其名称的子字符串:<密码>中继,<密码>反应继电器和<密码>graphql继电器将全部指向您的存根。

modulePathIgnorePatterns(数组<字符串>)#

默认:<密码>[]

一个regexp模式字符串数组,在模块加载器将所有模块路径视为“可见”之前匹配这些路径。如果给定模块的路径与任何模式匹配,则不匹配<密码>需要()-在测试环境中。

这些模式字符串与完整路径匹配。使用<密码>字符串标记,包括项目根目录的路径,以防止它意外忽略可能具有不同根目录的不同环境中的所有文件。例子:<密码>[“ / suppt /”]

modulePaths(数组<字符串>)#

默认:<密码>[]

设置的替代API<密码>节点路径环境变量,<密码>modulePaths是在解析模块时要搜索的其他位置的绝对路径数组。使用<密码>字符串令牌将路径包含在项目的根目录中。例子:<密码>[" < rootDir > / app /”)

通知[布尔]#

默认:<密码>错误的

激活测试结果的通知。

谨防:Jest利用node-notifier显示桌面通知。在Windows上,它在第一次使用时创建一个新的开始菜单项,而不显示通知。通知将在后续运行中正确显示

notifyMode(字符串)#

默认:<密码>失败改变

指定通知模式。要求<密码>通知:正确

模式#

  • 总是:始终发送通知。
  • 失败:测试失败时发送通知。
  • 成功:测试通过时发送通知。
  • 改变:当状态更改时发送通知。
  • 成功改变:当测试通过或在失败时发送通知。
  • 失败改变:在测试失败时发送通知或在它通过时一次。

预设(字符串)#

默认:<密码>未定义的

用作Jest配置基础的预设。预设应指向具有<密码>jest-preset.json..,<密码>jest-preset.js,<密码>jest-preset.cjs或<密码>jest-preset.mjs文件位于根目录下。

例如,这个预设<密码>Foo酒吧/jest-preset.js将配置如下:

{
“预设” : “foo bar”
}

预设也可能与文件系统路径有关。

{
“预设” : “/node\u modules/foo-bar/jest-preset.js”
}

预处理(字符串)#

默认:<密码>“更漂亮”

的路径漂亮的用于更新内联快照的节点模块。

项目[数组]#

默认:<密码>未定义的

当<密码>项目配置提供了一系列路径或直接模式,Jest将同时运行所有指定项目中的测试。这对于MONOREPOS或同时在多个项目上工作时非常棒。

{
“项目” : [ , / / examples / *” ]
}

此示例配置将在根目录以及示例目录中的每个文件夹中运行Jest。您可以在同一Jest实例中运行无限数量的项目。

项目功能也可用于运行多个配置或多个配置跑步者.为此,您可以传递一个配置对象数组。例如,要同时运行测试和ESLint(通过开玩笑的跑步者埃斯林特)在同样的玩笑中:

{
“项目” : [
{
“显示名称” : “测试”
} ,
{
“显示名称” : “皮棉” ,
“跑步者” : “开玩笑的跑步者埃斯林特” ,
“testmatch” : [ “< rootDir > / * * / * . js” ]
}
]
}

注意:使用多项目赛道时,建议添加一个<密码>显示名称为每个项目。这将显示<密码>显示名称在其测试旁边的项目。

记者[数组]#

默认:<密码>未定义的

使用此配置选项将自定义记者添加到Jest。自定义报告器是一个实现的类<密码>启动,<密码>onTestStart,<密码>安特斯特雷索,<密码>完成发生这些事件时将调用的方法。

如果指定了自定义报告器,则会覆盖默认的Jest报告器。为了留住默认的记者,<密码>默认的可以作为模块名称传递。

这将覆盖默认报告程序:

{
“记者” : [ /my custom reporter.js” ]
}

除了Jest提供的默认报告器之外,还将使用自定义报告器:

{
“记者” : [ “默认” , /my custom reporter.js” ]
}

此外,可以通过传递自定义报告者来配置<密码>选项对象作为第二个参数:

{
“记者” : [
“默认” ,
[ /my custom reporter.js” , { “香蕉” : “是的” , “菠萝” : “不” } ]
]
}

自定义Reporter模块必须定义需要a的类<密码>全球配置和记者选项作为构造函数参数:

示例记者:

/ / my-custom-reporter.js
班级 MyCustomReporter {
建造师 ( globalConfig , 选项 ) {
_全球配置 = globalConfig ;
_options = 选项 ;
}
完成 ( 上下文 , 结果 ) {
安慰 日志 ( '自定义报告器输出:' ) ;
安慰 日志 ( “GlobalConfig:” , _全球配置 ) ;
安慰 日志 ( '选项:' , _options ) ;
}
}
单元 出口 = MyCustomReporter ;
//或导出默认MyCustomReporter;

自定义报告器还可以通过返回错误来强制Jest退出非0代码<密码>getlasterror()方法

班级 MyCustomReporter {
/ /……
getLastError ( ) {
如果 ( _shouldFail ) {
返回 错误 ( 'my-custom-reporter.js报错' ) ;
}
}
}

有关方法和参数类型的完整列表,请参见<密码>记者界面packages/jest reporters/src/types.ts

resetMocks[布尔]#

默认:<密码>错误的

在每个测试之前自动重置模拟状态。相当于呼叫<密码>开玩笑.resetAllMocks ()在每个测试之前。这将导致任何删除其假实施的模型,但不会恢复其初始实施。

重置模块[布尔]#

默认:<密码>错误的

默认情况下,每个测试文件都有自己的独立模块注册表<密码>重置模块更进一步地进行一步,然后在运行每个单独的测试之前重置模块注册表。为每个测试隔离模块是有用的,因此本地模块状态在测试之间不会发生冲突。这可以以编程方式使用jest.resetModules()

解析器(字符串)#

默认:<密码>未定义的

此选项允许使用自定义解析器。该解析器必须是一个节点模块,该节点模块导出期望字符串作为路径的第一个参数,以及作为第二个参数的下列结构的对象的第一个参数:

{
“basedir” : 字符串 ,
“条件” : [ 字符串 ] ,
“默认解析程序” : 功能(请求、选项) ,
“扩展” : [ 字符串 ] ,
“moduleDirectory” : [ 字符串 ] ,
“路径” : [ 字符串 ] ,
“packageFilter” : “功能(PKG,PKGDIR)” ,
“路径过滤器” : “函数(PKG,PATH,REALIGPATH)” ,
“rootDir” : [ 字符串 ]
}

函数应该返回应该解析的模块的路径,或者在找不到模块时抛出错误。

注意:作为选项传递的DefaulTresolver是当您编写自定义一个时可能有用的Jest默认解析器。它与您的自定义相同的参数,例如,<密码>(请求,选项)

例如,如果要尊重Browserify“浏览器”场地,您可以使用以下配置:

{
...
“开玩笑” : {
“解析器” : /resolver.js”
}
}
// resolver.js.
常量 browserResolve = 要求 ( “浏览器解析” ) ;
单元 出口 = browserResolve 同步 ;

结合<密码>defaultResolver和<密码>包装过滤器我们可以实施<密码>package.json“预处理器”,允许我们更改默认解析器解析模块的方式。例如,假设我们想要使用这个字段<密码>“模块”如果存在,否则回退<密码>“主要”:

{
...
“开玩笑” : {
“解析器” : “我的模块 - 解析”
}
}
/ / my-module-resolve包
单元 出口 = ( 要求 , 选项 ) => {
//调用defaultResolver,以便利用其缓存、错误处理等。
返回 选项 defaultResolver ( 要求 , {
... 选项 ,
//在解析之前,使用packageFilter处理解析的`package.json`(请参阅https://www.npmjs.com/package/resolve#resolveid-opts(cb)
包装过滤器 : 包裹 => {
返回 {
... 包裹 ,
//在解析包之前更改'main'的值
主要的 : 包裹 单元 || 包裹 主要的 ,
} ;
} ,
} ) ;
} ;

而Jest不支持包裹<密码>出口(超过<密码>主要的),笑话将提供<密码>条件作为一个选项调用自定义解析器时,可用于实现支持<密码>出口在Userland。jest将通过<密码>(“进口”,“违约”)在ESM模式下运行测试时,以及<密码>['需要','默认']使用CJS运行时。此外,自定义测试环境可以指定<密码>出口条件方法,该方法返回一个条件数组,该数组将与Jest的默认值一起传递。

restoreMocks[布尔]#

默认:<密码>错误的

在每次测试之前自动恢复模拟状态。相当于呼叫<密码>开玩笑的,恢复性的在每个测试之前。这将导致任何模拟将被删除其假实现并恢复其初始实现。

rootDir(字符串)#

Default:包含Jest的目录的根目录配置文件这个<密码>package.json这个松材线虫病如果没有<密码>package.json被发现

Jest应该扫描其中的测试和模块的根目录。如果你把你的Jest配置<密码>package.json并希望根目录成为repo的根目录,此配置Param的值将默认为该目录<密码>package.json

通常,您会希望将此设置为<密码>“src”或<密码>“lib”,对应于存储库中的位置存储代码。

注意,使用<密码>''作为字符串标记,任何其他基于路径的配置设置都会引用回该值设置文件配置项以指向<密码>env-setup.js文件,您可以将其值设置为<密码>[“/env setup.js”]

(数组<字符串>)#

默认:<密码>[“”]

Jest在中搜索文件时应使用的目录路径列表。

有些时候,您只希望Jest在单个子目录中搜索(例如有<密码>src /目录),但阻止它访问repo的其余部分。

注意:虽然<密码>rootDir主要用作令牌,以便在其他配置选项中重复使用,<密码>根开玩笑的内部用于定位测试文件和源文件.这也适用于搜索来自的模块的手动模拟<密码>Node_modules.(<密码>__mocks__需要住在其中一个<密码>根)。

注意:默认情况下,<密码>根只有一个条目<密码>例如,在某些情况下,您可能希望在一个项目中有多个根<密码>根源:[“ / src /”,“ / / tests /”]

跑步者(字符串)#

默认:<密码>“jest-runner”

此选项允许您使用自定义运行程序,而不是Jest的默认测试运行程序。跑步者的例子包括:

注意:<密码>跑步者属性值可以忽略<密码>开玩笑的跑步者-包名的前缀。

要编写测试运行程序,请导出一个类,该类接受<密码>globalConfig在构造函数中,有一个<密码>runTests带有签名的方法:

异步的 runTests (
测验 : 数组 < 测验 > ,
观察家 : 测试观察者 ,
onStart : onteststart. ,
onResult : OnTestSuccess ,
onfailure. : 测试失败 ,
选项 : 测试运行器选项 ,
) : 许诺 < 无效 >

如果您需要限制您的测试运行器仅以串行方式运行而不是并行地执行,那么您的类应该具有该属性<密码>Iserial.设为<密码>真的

设置文件[阵列]#

默认:<密码>[]

指向运行某些代码以配置或设置测试环境的模块的路径列表。每个测试文件将运行一次每个设置文件。因为每个测试都在自己的环境中运行,所以在执行测试代码之前,这些脚本将立即在测试环境中执行。

同样值得注意的是<密码>设置文件将执行之前setupFilesAfterEnv

setupFilesAfterEnv[阵列]#

默认:<密码>[]

在执行套件中的每个测试文件之前,运行一些代码来配置或设置测试框架的模块的路径列表。自设置文件在环境中安装测试框架之前执行,这个脚本文件为您提供了在环境中安装测试框架之后立即运行一些代码的机会。

如果您想创建一条路径相对于项目的根目录,请包括<密码>在路径的字符串内,就像<密码>“< rootDir > / a-configs-folder”

例如,Jest附带了多个插件来<密码>茉莉花这项工作由猴子修补茉莉花API。如果您想要在混合中添加更多jasmine插件(或者如果您想要一些定制的、项目范围的匹配器),您可以在这些模块中这样做。

注意:<密码>设置测试frameworkscriptfile.不推荐使用<密码>setupFilesAfterEnv

例子<密码>setupFilesAfterEnvjest.config.js中的数组:

单元 出口 = {
setupFilesAfterEnv : [ “./jest.setup.js” ] ,
} ;

例子<密码>jest.setup.js文件

开玩笑 索取 ( 10000 ) ; / /以毫秒为单位

slowTestThreshold[数字]#

默认:<密码>5.。

在此之后,测试被认为是慢的,并在结果中报告为慢的秒数。

快照格式(对象)#

默认:<密码>未定义的

允许覆盖文档中记录的特定快照格式选项格式的自述。例如,此配置将使快照格式化程序不打印“对象”和“数组”的前缀:

{
“开玩笑” : {
“快照格式” : {
“printBasicPrototype” : 错误的
}
}
}
进口 { 预计 , 测试 } “@jest/globals” ;
测试 ( '不显示对象和数组内联的原型' , ( ) => {
常量 对象 = {
大堆 : [ { 你好 : “危险” } ] ,
} ;
预计 ( 对象 ) toMatchInlineSnapshot ( `
{
“数组”:(
{
“你好”:“危险”,
},
],
}
` ) ;
} ) ;

snapshotResolver(字符串)#

默认:<密码>未定义的

可解析测试<->快照路径的模块路径。此配置选项允许您自定义Jest在磁盘上存储快照文件的位置。

快照解析程序模块示例:

单元 出口 = {
//从测试路径解析为快照路径
解析快照路径 : ( 测试路径 , SnapshoteXtension. ) =>
测试路径 代替 ( “__tests__” , “__snapshots__” ) + SnapshoteXtension. ,
//从快照解析为测试路径
解析测试路径 : ( 快照文件路径 , SnapshoteXtension. ) =>
快照文件路径
代替 ( “__snapshots__” , “__tests__” )
( 0 , - SnapshoteXtension. 长度 ) ,
//示例测试路径,用于上述实现的飞行前一致性检查
testpath forconsistencycheck. : “一些/ __tests__ / example.test.js” ,
} ;

snapshotSerializers(数组<字符串>)#

默认:<密码>[]

Jest应用于快照测试的快照序列化程序模块的路径列表。

Jest为内置JavaScript类型,HTML元素(Jest 20.0.0+),ImmutableJS(Jest 20.0.0+)和React元素的默认序列化器。看快照测试教程为更多的信息。

示例序列化器模块:

//我的序列化程序模块
单元 出口 = {
序列化 ( 瓦尔 , 配置 , 压痕 , 深度 , 参考文献 , 打印机 ) {
返回 “相当foo:” + 打印机 ( 瓦尔 Foo ) ;
} ,
测试 ( 瓦尔 ) {
返回 瓦尔 && 瓦尔 hasOwnProperty ( “foo” ) ;
} ,
} ;

打印机是一个使用现有插件序列化值的函数。

使用<密码>my-serializer-module作为序列化器,配置如下:

{
...
“开玩笑” : {
“snapshotSerializers” : [ “我的序列化程序模块” ]
}
}

最后的测试如下所示:

测试 ( ( ) => {
常量 酒吧 = {
Foo : {
x : 1. ,
Y : 2. ,
} ,
} ;
预计 ( 酒吧 ) 托马奇斯纳普肖特 ( ) ;
} ) ;

呈现快照:

漂亮foo : 对象 {
“x” : 1. ,
“y” : 2. ,
}

要使依赖项显式而不是隐式,可以调用expect.addSnapshotSerializer为单个测试文件添加模块,而不是将其路径添加到<密码>snapshotSerializers开玩笑的配置。

可以找到有关序列化程序API的更多信息在这里.

测试环境(字符串)#

默认:<密码>“节点”

将用于测试的测试环境。Jest中的默认环境是Node.js环境。如果你正在构建一个web应用程序,你可以通过使用一个类似浏览器的环境jsdom反而。

通过添加A.<密码>@jest-environment在文件顶部的Docblock中,可以指定用于该文件中的所有测试的另一个环境:

/ **
*@jest-environment-jsdom
*/
测试 ( '在这个测试文件中使用jsdom ' , ( ) => {
常量 元素 = 文档 createElement ( “div” ) ;
预计 ( 元素 ) toBeNull ( ) ;
} ) ;

您可以创建自己的模块,用于设置测试环境。模块必须导出类<密码>设置,<密码>拆卸和<密码>getVmContext方法。您还可以通过将变量分配给<密码>this.global对象–这将使它们作为全局变量在测试套件中可用。

该类可以选择性地公开异步<密码>handleTestEvent绑定事件的方法玩笑马戏团正常地<密码>玩笑马戏团测试运行者会暂停,直到从服务器返回承诺<密码>handleTestEvent得到满足,除了接下来的事件:<密码>开始描述定义,<密码>finish_describe_definition,<密码>A.dd_hook.,<密码>A.dd_test或<密码>错误(对于您可以查看的最新列表Syncevent类型在类型定义中)。这是由于向后兼容的原因和<密码>过程.on('unhandledRejection',回调)签名,但对于大多数用例来说,这通常不应该是一个问题。

测试文件中的任何docblock pragmas都将被传递给环境构造函数,并可用于每个测试的配置。如果pragma没有值,它将出现在对象中,并将其值设置为空字符串。如果pragma不存在,它将不会出现在对象中。

若要将此类用作自定义环境,请按其在项目中的完整路径对其进行引用。例如,如果您的类存储在<密码>my-custom-environment.js在项目的一些子文件夹中,注释可能像这样:

/ **
* @jest-environment。/ src /测试/ my-custom-environment
*/

注意:TestEnvironment是沙箱化的。每个测试套件将在它们自己的TestEnvironment中触发设置/拆除。

例子:

/ / my-custom-environment
常量 节点环境 = 要求 ( “jest环境节点” ) ;
班级 海度环境 扩展 节点环境 {
建造师 ( 配置 , 语境 ) {
超级 ( 配置 , 语境 ) ;
测试路径 = 语境 测试路径 ;
多氯联苯 = 语境 多氯联苯 ;
}
异步的 设置 ( ) {
等待 超级 设置 ( ) ;
等待 一些设置任务 ( 测试路径 ) ;
全球的 一些globalobject. = createGlobalObject ( ) ;
//如果docblock包含@my custom pragma my pragma值,则将触发
如果 ( 多氯联苯 [ “my-custom-pragma” ] ===. “my-pragma-value” ) {
/ /……
}
}
异步的 拆卸 ( ) {
全球的 一些globalobject. = 破坏全局对象 ( ) ;
等待 someTeardownTasks ( ) ;
等待 超级 拆卸 ( ) ;
}
getVmContext ( ) {
返回 超级 getVmContext ( ) ;
}
异步的 handleTestEvent ( 事件 , 状态 ) {
如果 ( 事件 的名字 ===. 'test_start' ) {
/ /……
}
}
}
单元 出口 = 海度环境 ;
/ / my-test-suite
/ **
* @jest-environment。/ my-custom-environment
*/
一些globalobject. ;
以前 ( ( ) => {
一些globalobject. = 全球的 一些globalobject. ;
} ) ;

testEnvironmentOptions[目的]#

默认:<密码>{}

将传递给的测试环境选项<密码>测试环境.相关选项取决于环境。例如,可以覆盖给的选项jsdom例如<密码>{userAgent:“Agent/007”}

testFailureExitCode[数字]#

默认:<密码>1.。

退出代码对测试失败返回。

注意:在Jest错误(例如无效配置)的情况下,这不会改变退出代码。

测试匹配(数组<字符串>)#

(默认值:<密码>[“**/\\\\\\\/***.[jt]s?(x)”,“**/?(*)+(规范测试)。[jt]s?(x)”])

Glob模式Jest用于检测测试文件。默认情况下,它查找<密码>。js,<密码>。jsx.,<密码>。ts和<密码>。tsx文件里面的<密码>__测验__文件夹,以及后缀为的任何文件<密码>测试或<密码>。spec(例如。<密码>Component.test.js或<密码>Component.spec.js)。它还将查找名为<密码>。js或<密码>规格js

看到微匹配包以获取可以指定的模式的详细信息。

也可以看看testRegex(字符串数组| <字符串>),但请注意不能同时指定这两个选项。

注意:每个Glob模式按配置顺序应用它们。(例如<密码>[" !* * / __fixtures __/**", "**/__ tests__ / * * / * . js”)不会排除<密码>__固定装置__因为否定被第二个模式覆盖了。为了在这个例子中使负的glob工作,它必须在后面<密码>* * / __tests__ / * * / * . js.)

testPathIgnorePatterns(数组<字符串>)#

默认:<密码>[“/node_modules/”]

在执行测试之前,与所有测试路径匹配的regexp模式字符串数组。如果测试路径与任何模式匹配,它将被跳过。

这些模式字符串与完整路径匹配。使用<密码>字符串标记,包括项目根目录的路径,以防止它意外忽略可能具有不同根目录的不同环境中的所有文件。例子:<密码>[" < rootDir > /构建/”,“< rootDir > / node_modules /”)

testRegex(字符串数组| <字符串>)#

默认:<密码>(/__tests__/.* :( \\.ie/) (test | spec))\\.[jt]sx ??

Jest用于检测测试文件的一个或多个模式。默认情况下,它查找<密码>。js,<密码>。jsx.,<密码>。ts和<密码>。tsx文件里面的<密码>__测验__文件夹,以及后缀为的任何文件<密码>测试或<密码>。spec(例如。<密码>Component.test.js或<密码>Component.spec.js)。它还将查找名为<密码>。js或<密码>规格js。另见测试匹配(数组<字符串>),但请注意不能同时指定这两个选项。

下面是默认正则表达式的可视化:

├── __测验__
│└──component.spec.js. #试验
│└──任何东西 #试验
├── package.json #不测试
├── foo.test.js #试验
├──bar.spec.jsx #试验
└── component.js #不测试

注意:<密码>testRegex将尝试使用该文件检测测试文件绝对文件路径因此,拥有一个包含匹配的文件夹,它将将所有文件作为测试运行

测试结果处理器(字符串)#

默认:<密码>未定义的

此选项允许使用自定义结果处理器。此处理器必须是一个节点模块,该模块导出一个函数,该函数需要一个第一个参数为以下结构的对象,并返回该对象:

{
“成功” : 布尔值 ,
“开始时间” : 时代 ,
“numTotalTestSuites” : 数字 ,
“numPassedTestSuites” : 数字 ,
“numFailedTestSuites” : 数字 ,
“numRuntimeErrorTestSuites” : 数字 ,
“numTotalTests” : 数字 ,
“numPassedTests” : 数字 ,
“numFailedTests” : 数字 ,
“numPendingTests” : 数字 ,
“numTodoTests” : 数字 ,
“openHandles” : 数组<错误> ,
“检测结果” : [ {
“numFailingTests” : 数字 ,
“numPassingTests” : 数字 ,
“numPendingTests” : 数字 ,
“检测结果” : [ {
“标题” : 字符串(消息在它块) ,
“状态” : “失败” | “待办的” | “通过” ,
“祖先” : [ 字符串(描述块中的消息) ] ,
“收到故障术” : [ 字符串 ] ,
“numpassingasserts” : 数字 ,
“位置” : {
“列” : 数字 ,
“行” : 数字
}
} ,
...
] ,
“perfStats” : {
“开始” : 时代 ,
“结束” : 时代
} ,
“testFilePath” : 测试文件的绝对路径 ,
“报道” : { }
} ,
”testExecError:“ (存在如果存在顶级故障) {
“消息” : 字符串
“堆” : 字符串
}
...
]
}

testRunner(字符串)#

默认:<密码>玩笑马戏团/跑步

此选项允许使用自定义测试运行程序。默认值为<密码>玩笑马戏团.可以通过指定到测试运行器实现的路径来提供自定义测试运行器。

test runner模块必须导出具有以下签名的函数:

函数 testRunner (
globalConfig : 全球配置 ,
配置 : ProjectConfig. ,
环境 : 环境 ,
运行时 : 运行时 ,
测试路径 : 字符串 ,
) : 许诺 < 测试结果 > ;

在我们的默认设置中可以找到此类函数的示例Jasmine2测试运行程序包.

测序器(字符串)#

默认:<密码>@jest/测试定序器

这个选项允许您使用自定义音序器而不是Jest的默认音序器。<密码>种类可以选择返回一个Promise。

例子:

按字母顺序对测试路径排序。

// testsequencer.js.
常量 序列序列 = 要求 ( “@jest/test sequencer” ) 默认的 ;
班级 自定义序列器 扩展 序列序列 {
种类 ( 测验 ) {
//测试结构信息
/ / https://github.com/facebook/jest/blob/6b8b1404a1d9254e7d5d90a8934087a9c9899dab/packages/jest-runner/src/types.ts L17-L21
常量 = 数组 ( 测验 ) ;
返回 种类 ( ( 种皮 , 测试B ) => ( 种皮 路径 > 测试B 路径 ? 1. : - 1. ) ) ;
}
}
单元 出口 = 自定义序列器 ;

在Jest配置文件中使用它,如下所示:

{
“testSequencer” : “path / to / testsequencer.js”
}

testTimeout[数字]#

默认:<密码>5000

测试的默认超时(毫秒)。

测试URL(字符串)#

默认:<密码>http://localhost

这个选项设置jsdom环境的URL。它反映在诸如<密码>location.href

计时器(字符串)#

默认:<密码>真正的

将此值设置为<密码>假的或<密码>现代默认情况下为所有测试启用虚假计时器。当一段代码设置了一个我们不想在测试中等待的长超时时,假计时器是有用的。你可以了解更多关于假计时器的信息在这里.

如果值为<密码>遗产,旧的实现将被用作实现而不是一个支持的实施@ sinonjs /假时

使改变[对象]#

默认:<密码>{“\\[jt]sx?$”:“巴别塔笑话”}

从正则表达式到转换器路径的地图。变压器是一个模块,为转换源文件提供同步功能。例如,如果您希望能够在Node尚未支持的模块或测试中使用新的语言功能,则可能会插入许多编译器中的一个编译器中的一个,该编译器将来版本的JavaScript到当前。示例:看看示例/打字脚本例子或webpack教程.

这种编译器的例子包括:

您可以像这样将配置传递给转换器<密码>{文件Pattern: [path-to-transformer,{选项}]}例如,要为非默认行为配置babel-jest,<密码>{“\\。js $”:['babel-jest',{rootmode:“向上”}“}

注意:除非文件已更改,否则转换器每个文件只运行一次。在开发变压器期间,使用它运行Jest是很有用的<密码>--无缓存频繁删除Jest的缓存.

注意:添加其他代码转换器时,这将覆盖默认配置和<密码>巴别塔玩笑不再自动加载。如果要使用它来编译JavaScript或TypeScript,则必须通过添加来明确定义<密码>{“\\[jt]sx?$”:“巴别塔笑话”}转换属性。看见巴贝尔笑话插件

一个转换器必须是一个至少具有<密码>过程函数,并且还建议包含<密码>getCacheKey如果你的转换器是用ESM写的,你应该有一个默认的导出对象。

如果测试是用原生ESM变压器可以输出<密码>processAsync..和<密码>getCacheKeyAsync而不是同步变体。

transformIgnorePatterns(数组<字符串>)#

默认:<密码>[" / node_modules”、“\ \ .pnp \\.[^\\\/]+$"]

在转换之前与所有源文件路径匹配的regexp模式字符串数组。如果文件路径与任何模式匹配,则不会对其进行转换。

这些模式字符串与完整路径匹配。使用<密码>字符串标记,包括项目根目录的路径,以防止它意外忽略可能具有不同根目录的不同环境中的所有文件。

例子:<密码>[“/bower\u components/”,“/node\u modules/”]

有时(特别是在React Native或TypeScript项目中)第三方模块以未翻译的形式发布。因为里面的所有文件<密码>Node_modules.默认情况下,Jest不会理解这些模块中的代码,从而导致语法错误。要克服这个问题,您可以使用<密码>transformIgnorePatterns允许对这些模块进行编译。您可以在中找到这个用例的一个好例子反应母语指南.

unmokedmodulepathpatterns.(数组<字符串>)#

默认:<密码>[]

在模块加载器自动返回模拟之前,与所有模块匹配的regexp模式字符串数组。如果模块的路径与此列表中的任何模式匹配,则模块加载程序不会自动模拟该路径。

这对于一些常用的“实用”模块是有用的,这些模块几乎总是被用作实现细节,几乎所有时间(如下划线/lo-dash等)。最佳实践通常是保持列表尽可能小,并始终使用显式<密码>开玩笑.模拟()/<密码>开玩笑.unmock()个人测试呼叫。对于测试将在测试中运行的环境的原因,明确的每次测试设置远远较容易。

可以通过显式调用<密码>开玩笑.模拟()在测试文件的顶部。

verb[布尔]#

默认:<密码>错误的

指示是否应在运行期间报告每个单独的测试。执行后,所有错误仍将显示在底部后底部。请注意,如果只运行一个测试文件,它将默认<密码>真的

watchPathIgnorePatterns(数组<字符串>)#

默认:<密码>[]

在监视模式下重新运行测试之前,与所有源文件路径匹配的RegExp模式数组。如果文件路径与任何模式匹配,则在更新文件路径时,不会触发重新运行测试。

这些模式匹配整个路径。使用<密码>字符串标记,包括项目根目录的路径,以防止它意外忽略可能具有不同根目录的不同环境中的所有文件。例子:<密码>[" < rootDir > / node_modules /”)

即使此处未指定任何内容,观察者也会忽略对任何隐藏文件和目录的更改,即以点开头的文件和文件夹(<密码>.)。

手表插件[数组]#

默认:<密码>[]

这个选项允许你使用自定义的监视插件。阅读更多关于手表插件的信息在这里.

观察插件的例子包括:

注意:中的值<密码>手表插件属性值可以忽略<密码>开玩笑-watch -包名的前缀。

守望[布尔]#

默认:<密码>真的

是否使用守望用于文件爬网。

//(字符串)#

没有默认的

此选项允许在中添加注释<密码>package.json。将注释文本作为此键的值包含在<密码>package.json

例子:

{
“姓名” : “我的项目” ,
“开玩笑” : {
“/ /” : “这里有评论” ,
“verbose” : 真的
}
}