跳到主要内容
版本:26.x.

Objeto Jest.

笑话对象自动在每个测试文件中自动分开。这些方法笑话对象帮助创建模亚搏取款拟,让您控制Jest的整体行为。它也可以通过通孔显式导入import {jest} from ` @jest/globals `

模拟模块

JEST.DISABLEAUTOMOCK()

desabilitasimulaçõesautomáticasno carregador demódulo。

汽车的部分配置想要查询更多的信息

帐户是método é chamado, todos os要求()Irão重返者为versõesreais de cadamódulo(emvez de umaversãosimulada,ou mocked)。

Jest配置:

{
“汽车” 真正的
}

例子:

// utils.js.
出口 默认 {
授权 = > {
返回 '令牌' ;
}
} ;
/ / __tests__ / disableAutomocking.js
进口 跑龙套 “. . /跑龙套” ;
笑话 脱言 ;
测试 “原始实现” = > {
//现在我们有原始实施,
//即使我们以JEST配置设置Automocking
预计 跑龙套 授权 成为 '令牌' ;
} ;

是e geralmente util quando低地有效嗯单丝cenario o de dependencias期,se这位伪装者(模拟、em单身)e muito menor做什么号阿德想知道dependencias nao这位。我们举个例子,você我们做了一个测试来测试这个测试的结果módulo我们做了一个很大的效用número de dependências我们做了一个分类的测试来测试这个分类的implementação做módulo, então você provavelmente não做类似的测试。

Examples of dependencies that might be considered "implementation details" are things ranging from language built-ins (e.g. Array.prototype methods) to highly common utility methods (e.g. underscore/lo-dash, array utilities, etc) and entire libraries like React.js.

Retorna O Objeto.笑话Para encadeamento。

Nota:EsteMétodoAnteriormenteFoi Chamado汽车自动化。Ao城市搜救Babel-Jest.,存在帕拉脱言serão automaticamente içadas(悬挂,em inglês) até o topo do bloco de código。使用汽车自动化Sevicêquiser evitarexingicamentame esse comportamento。

jest.enableautomock()

Habilita simulações automáticas没有carregador de módulo。

Retorna O Objeto.笑话Para encadeamento。

汽车的部分配置想要查询更多的信息

例子:

// utils.js.
出口 默认 {
授权 = > {
返回 '令牌' ;
}
isAuthorized 秘密 = > 秘密 ===. '巫师'
} ;
// __tests __ / eNableAutomocking.js
笑话 Enableautocock. ;
进口 跑龙套 “. . /跑龙套” ;
测试 “原始实现” = > {
//现在我们有嘲弄的实施,
预计 跑龙套 授权 _isMockFunction Tobeththy. ;
预计 跑龙套 isAuthorized _isMockFunction Tobeththy. ;
} ;

Nota:EsteMétodoAnteriormenteFoi ChamadoautoMockOn。Ao城市搜救Babel-Jest.,存在帕拉Enableautocock.serão automaticamente içadas(悬挂,em inglês) até o topo do bloco de código。使用autoMockOnSevicêquiser evitarexingicamentame esse comportamento。

jest.createmockfrommodule(modulename)

重命名开玩笑26.0.0+

别名下还有:.genmockfrommodule(modulename)

Dado o nome de um módulo,使用sistema automático de simulação para gerar uma versão simulada do módulo para você。

ISSOÉTilQuandoCodêSteejaCriarUmaSimulação手册你要向simulação automática道歉。

例子:

// utils.js.
出口 默认 {
授权 = > {
返回 '令牌' ;
}
isAuthorized 秘密 = > 秘密 ===. '巫师'
} ;
/ / __tests__ / createMockFromModule.test.js
const 跑龙套 = 笑话 createMockFromModule “. . /跑龙套” 默认 ;
跑龙套 isAuthorized = 笑话 FN. 秘密 = > 秘密 ===. '不是向导' ;
测试 '由jest.createMockFromModule创建的实现' = > {
预计 跑龙套 授权 模拟 Tobeththy. ;
预计 跑龙套 isAuthorized '不是向导' toequal. 真正的 ;
} ;

这是如何createMockFromModule将模拟以下数据类型:

funções.

创造一个新的模拟功能。新功能没有正式参数,而叫将返回不明确的。这个功能也适用于异步功能。

班级

创造一个新的课程。维护原始类的接口,所有类成员函数和属性都将被嘲笑。

目的

创建一个新的深度克隆对象。对象键被维护并且它们的值被模拟。

数组

创建一个新的空数组,忽略原始。

原语

创建与原始属性具有相同原始值的新属性。

例子:

// example.js.
module.exports = {
函数:function square(a, b) {
返回* b;
},
异步:异步函数异步(A,B){
const result = await a * b;
返回结果;
},
新建Bar类
构造函数(){
这一点。数组=[1那2那3.];
}
foo(){}
},
对象:{
记者:“foo”,
酒吧:{
饮料:1、
嗡嗡声:[1,2,3],
},
},
数组:[1,2,3],
号码:123,
弦:“记者”,
布尔:真实,
符号:符号。对于('a.b.c'),
};
// __tests __ / example.test.js
const 例子 = 笑话 createMockFromModule '。/例子' ;
测试 “应该运行示例代码” = > {
//创建一个没有正式参数的新模拟函数。
预计 例子 函数 名称 toequal. '正方形' ;
预计 例子 函数 长度 toequal. 0. ;
//异步函数得到与标准同步函数相同的处理。
预计 例子 异步 名称 toequal. 'asyncsquare' ;
预计 例子 异步 长度 toequal. 0. ;
//创建一个具有相同接口的新类,成员函数和属性被模拟。
预计 例子 班级 构造函数 名称 toequal. “酒吧” ;
预计 例子 班级 Foo 名称 toequal. 'foo' ;
预计 例子 班级 数组 长度 toequal. 0. ;
//创建一个深刻的克隆版本的原始对象。
预计 例子 目的 toequal. {
Baz. 'foo'
酒吧 {
菲律 1
嗡嗡声 [ ]
}
} ;
//创建一个新的空数组,忽略原始数组。
预计 例子 数组 长度 toequal. 0. ;
//创建一个与原始属性具有相同原始值的新属性。
预计 例子 数量 toequal. 123 ;
预计 例子 细绳 toequal. “记者” ;
预计 例子 布尔 toequal. 真正的 ;
预计 例子 象征 toequal. 象征 为了 'a.b.c' ;
} ;

jest.mock.(modulename.那工厂那选项)

SimulaUmmóduloComUmaVersão汽车Simulada Quando EleEstáDendo“必填”。工厂E.选项圣opcionais。为什么exemplo:

/ / banana.js
模块 出口 = = > '香蕉' ;
/ / __tests__ / . js
笑话 模拟 “. . /香蕉” ;
const 香蕉 = 要求 “. . /香蕉” ; //香蕉将被明确地嘲笑。
香蕉 ; //将返回“未定义”,因为该函数是自动模拟的。

o Segundo Argumento Pode Ser USADO Para Especificar UMMóduloFactoryExplícitoQueEstádeneoexecutado emvez de Usar o Recurso de Automocking Do Jest:

笑话 模拟 “. . / moduleName” = > {
返回 笑话 FN. = > 42. ;
} ;
//这运行指定为第二个参数的函数到“jest.mock`。
const modulename. = 要求 “. . / moduleName” ;
modulename. ; //将返回'42';

使用时工厂具有默认导出的ES6模块的参数,__esmodule:真实属性需要指定。这个属性通常是由Babel / TypeScript生成的,但这里需要手动设置。当导入默认导出时,它是一条导入名为默认从export对象:

进口 modulename. { Foo } “. . / moduleName” ;
笑话 模拟 “. . / moduleName” = > {
返回 {
__esmodule. 真正的
默认 笑话 FN. = > 42.
Foo 笑话 FN. = > 43.
} ;
} ;
modulename. ; //将返回42
Foo ; //将返回43

请您帮我讨论一下simulações virtuais - simulações de módulos que não有什么问题吗?

笑话 模拟
“. . / moduleName”
= > {
/ *
*自定义在JS中不存在的模块,
*与生成的模块或反应本机中的本机模块一样。
* /
}
{ 虚拟的 真正的 }
;

警告:在安装文件中导入模块(由setuptestframeworkscriptfile.)将防止对有问题的模块以及它所导入的所有模块进行模拟。

Módulos que são simulados(嘲笑,em inglês) comjest.mock.Sãosimulados apenas para o arquivo que chamajest.mock.。导入该模块的另一个文件将获得原始实现,即使它在模拟该模块的测试文件之后运行。

Retorna O Objeto.笑话Para encadeamento。

jest.unmock (moduleName)

indipa que o sistema demódulonunca deve Retornar UmaVersãosimulada(嘲笑,eminglês)domódulofecificadono要求()(举例来说,我们先去看看módulo real)。

o Uso Mais Comum DessaApiééseciecificaraomóduloquemumentinado teste pretende testar(e,portanto,nãoquerser自动名称simulado)。

Retorna O Objeto.笑话Para encadeamento。

笑话。doMock (moduleName、工厂、选项)

Ao城市搜救Babel-Jest.,存在帕拉模拟serão automaticamente içadas(悬挂,em inglês) até o topo do bloco de código。使用EstemétodoSeoCoCêSeejaevitar Spalicativee Esse Comportamento。

UM审查de QuandoIssoéstiléQuandovicêquer simular(mock,eminglês)de outramaneiraummódulodentrodo mesmo arquivo:

摘要 = > {
笑话 重置模块 ;
} ;
测试 'moduleename 1' = > {
笑话 dom “. . / moduleName” = > {
返回 笑话 FN. = > 1 ;
} ;
const modulename. = 要求 “. . / moduleName” ;
预计 modulename. toequal. 1 ;
} ;
测试 'moduleename 2' = > {
笑话 dom “. . / moduleName” = > {
返回 笑话 FN. = > 2 ;
} ;
const modulename. = 要求 “. . / moduleName” ;
预计 modulename. toequal. 2 ;
} ;

使用jest.domock()使用ES6导入需要额外的步骤。如果你不想使用,请遵循这些要求在您的测试中:

  • 我们必须指定__esmodule:真实属性(见jest.mock()有关更多信息的API)。
  • 静态ES6模块导入将挂起到文件的顶部,因此我们必须使用动态地使用它们进口()
  • 最后,我们需要一个支持动态导入的环境。请参阅使用巴别塔对于初始设置。然后添加插件Babel-Plugin-Dynamic-Import-node,或等效于Babel配置,以在Node中启用动态导入。
摘要 = > {
笑话 重置模块 ;
} ;
测试 'moduleename 1' = > {
笑话 dom “. . / moduleName” = > {
返回 {
__esmodule. 真正的
默认 'default1'
Foo “foo1”
} ;
} ;
返回 进口 “. . / moduleName” 然后 modulename. = > {
预计 modulename. 默认 toequal. 'default1' ;
预计 modulename. Foo toequal. “foo1” ;
} ;
} ;
测试 'moduleename 2' = > {
笑话 dom “. . / moduleName” = > {
返回 {
__esmodule. 真正的
默认 “default2”
Foo “foo2”
} ;
} ;
返回 进口 “. . / moduleName” 然后 modulename. = > {
预计 modulename. 默认 toequal. “default2” ;
预计 modulename. Foo toequal. “foo2” ;
} ;
} ;

Retorna O Objeto.笑话Para encadeamento。

jest.dontmock(moduleename)

Ao城市搜救Babel-Jest.,存在帕拉揭发serão automaticamente içadas(悬挂,em inglês) até o topo do bloco de código。使用EstemétodoSeoCoCêSeejaevitar Spalicativee Esse Comportamento。

Retorna O Objeto.笑话Para encadeamento。

jest.setmock(moduleename,moduleexports)

明确的目标模拟(mock, em inglês)的系统系统的módulo开发retonar para o módulo的详细说明。

有时,有时间自动生成的模块模块系统通常提供您的测试需求不足以提供足够的足够足以。Normalmente NessasCircunstânciasvocêveve Escrever UmaSimulação手册Que for Mais Adequada ParaOmóduloEmQuestão。No Entanto,EmoSiõesTremalamenteRaras,AtéMesmoMumSimulação手册NãoéAprakiadaPara SeusPropósitoseCoMêCroudaConstruir ASimulaçãoCovêMesmoindro de seu teste。

NessasSituaçõesRARAS,VOODY USAR ASESA API Para PREENCHER MANIAMMENTE O Slot Do Regane“Mock-Module”No Sistema DoMódulo。

Retorna O Objeto.笑话Para encadeamento。

注:推荐-se usar ao invésjest.mock()。哦,我的第二个理由是jest.mock.éumafábricademódulo,emvez do esperado objeto domóduloorceadado。

Jest.requireAcctual(Modulename)

返回实际模块而不是模拟,绕过所有检查模块是否应接收模拟实现。

例子:

笑话 模拟 “. . / myModule里” = > {
//要求原始模块不被嘲笑......
const 原始模块 = 笑话 请求 “. . / myModule里” ;
返回 {
__esmodule. 真正的 //处理ESModules时使用它
...... 原始模块
getrandom. 笑话 FN. mockReturnValue 10
} ;
} ;
const getrandom. = 要求 “. . / myModule里” getrandom. ;
getrandom. ; //总是返回10

jest.requeremock(modulename)

返回一个模拟模块而不是实际的模块,绕过所有关于正常情况下是否需要该模块的检查。

jest.resetModules ()

重新定义o注册omódulo - o cache de todos osmódulossuttingários。Issoétilarisolarmódulosonde o ostado本地pode entrar em conflito entre os testes。

例子:

const SUM1. = 要求 “. . /总和” ;
笑话 重置模块 ;
const SUM2. = 要求 “. . /总和” ;
SUM1. ===. SUM2. ;
// > false(两个sum模块都是sum模块的独立“实例”)

举例说明:

摘要 = > {
笑话 重置模块 ;
} ;
测试 “工作” = > {
const 总和 = 要求 “. . /总和” ;
} ;
测试 “工作太” = > {
const 总和 = 要求 “. . /总和” ;
// sum是sum模块与之前测试的不同副本。
} ;

Retorna O Objeto.笑话Para encadeamento。

Jest.isolateModules(FN)

Jest.isolateModules(FN)比…更进一步jest.resetModules ()并为在回调函数内加载的模块创建一个沙箱注册表。这对于隔离每个测试的特定模块非常有用,以便本地模块状态在测试之间不会发生冲突。

mymodule. ;
笑话 isolateModules = > {
mymodule. = 要求 “myModule里” ;
} ;
const otherCopyOfMyModule = 要求 “myModule里” ;

模拟功能

JEST.FN(实施)

Retorna Uma Nova,NãoMuterizadafuncao de simulacao。Opcionalmente, toma uma implementação de simulação (mock, em inglês)。

const mockFn = 笑话 FN. ;
mockFn ;
预计 mockFn toHaveBeenCalled ;
//使用模拟实现:
const rethentrue. = 笑话 FN. = > 真正的 ;
控制台 日志 rethentrue. ; / /正确;

jest.ismockfunction(fn)

决定论função dada é uma função simulada。

jest.spyon(对象,methodname)

创建类似于jest.fn还要跟踪电话对象(methodName)。返回一个jest.模拟功能

注:padrao,jest.spyOntambém chama o método发现了。Estéubcomportamento diferente da maioria das outras bibliotecas de teste。sevocêdeseja substituir afumção原始,vocêpode usarjest.spyon(对象,methodname)。模拟Implementation(() => customImplementation)对象[methodname] = jest.fn(()=> customimplingation);

例子:

const 视频 = {
{
返回 真正的 ;
}
} ;
模块 出口 = 视频 ;

Exemplo做证人:

const 视频 = 要求 '。/视频' ;
测试 '播放视频' = > {
const 间谍 = 笑话 spyOn 视频 '玩' ;
const isPlaying = 视频 ;
预计 间谍 toHaveBeenCalled ;
预计 isPlaying 成为 真正的 ;
间谍 模仿者 ;
} ;

jest.spyon(对象,方法名称,acceptype?)

自Jest 22.1.0+以来,jest.spyOn方法采用可选的第三个论点accessType这可以是'得到''放',当您想分别监视getter或setter时,这被证明是非常有用的。

例子:

const 视频 = {
//它是一个getter!
得到 {
返回 真正的 ;
}
} ;
模块 出口 = 视频 ;
const 声音的 = {
_volume 错误的
//这是一个骗局!
体积 价值 {
_volume = 价值 ;
}
得到 体积 {
返回 _volume ;
}
} ;
模块 出口 = 声音的 ;

Exemplo做证人:

const 声音的 = 要求 '。/声音的' ;
const 视频 = 要求 '。/视频' ;
测试 '播放视频' = > {
const 间谍 = 笑话 spyOn 视频 '玩' '得到' ; //我们通过'get'
const isPlaying = 视频 ;
预计 间谍 toHaveBeenCalled ;
预计 isPlaying 成为 真正的 ;
间谍 模仿者 ;
} ;
测试 '玩音频' = > {
const 间谍 = 笑话 spyOn 声音的 '体积' '放' ; //我们传递'set'
声音的 体积 = One hundred. ;
预计 间谍 toHaveBeenCalled ;
预计 声音的 体积 成为 One hundred. ;
间谍 模仿者 ;
} ;

jest.clearAllMocks ()

扫清了mock.callsmock.instances所有模拟的属性。相当于呼叫.mockClear ()在每个模拟函数上。

Retorna O Objeto.笑话Para encadeamento。

jest.resetallmocks()

重置所有模拟的状态。相当于呼叫.mockReset ()在每个模拟函数上。

Retorna O Objeto.笑话Para encadeamento。

jest.restoreallmocks()

Restaura Todas作为Simulações(模拟,EmInglês)Para Seu Valor原装。相当于呼叫.mockrestore()在每个模拟函数上。注意,jest.restoreallmocks()仅在创建模拟时工作jest.spyOn;其他模拟需要您手动恢复它们。

模拟计时器

jest.usefaketimers(实施?:'现代'|'遗产')

指示Jest使用标准计时器功能的假版(索取setIntervalclearTimeoutclearIntervalnextTicksetImmediateclearImmediate日期)。

如果你通过了“遗产”作为一个论点,将使用jest的遗留实施而不是一个基于@ sinonjs /假时。这也嘲笑额外的计时器,如日期'现代的'将是Jest 27中的默认行为。

Retorna O Objeto.笑话Para encadeamento。

jest.userealtimers()

Instrui jest para usar为Versõesreais dasfunçõesde临时审查者padrão。

Retorna O Objeto.笑话Para encadeamento。

jest.runallticks()

Esgota a pilha de-task (geralmente usando um interface node viaprocess.nexttick.)。

Chamada的Quando Esta API,Todas Micro-Tasks Pendentes Que Foram Empilhadas Viaprocess.nexttick.Serãoexecutadas。adicionalee,caso estas微型任务纪念日诺瓦斯微型任务,essas por sua vezserãoesgotadasAtéqueãohaja mais micro-tasks na fila。

jest.runalltimers()

竭尽全力-task队列(即,排队排队的所有任务setTimeout ()setInterval(),setImmediate ())和-task队列(通常通过节点界面接口process.nexttick.)。

调用此API时,将执行所有挂起的宏任务和微任务。如果这些任务本身安排新任务,那么队列中没有更多的任务将不断耗尽。

Isso muitas vezes é útil para executar de modo síncrono setTimeouts durante um teste para verificar sincronicamente algum comportamento que só aconteceria após as“callbacks”setTimeout ()setInterval()executarem。Consulte一documentacaoSimulaçõesde临时审查para obter mais informações。

jest.runAllImmediates ()

Esgota Todas作为Tarefas Enfileiradas PorsetImmediate ()

注意:当使用现代假计时器实现时,此函数不可用

Jest.AdvancetimersBytyTime(Mstorun)

重命名开玩笑22.0.0+

别名下还有:.runtrimerstotime()

Executa Somente是一个Fila de Tarefas宏(Ou Seja,Todas,As Tarefas Enfileiradas PorsetTimeout ()setInterval()E.setImmediate ())。

当调用这个API时,所有计时器都被提前Mstorun.毫秒。所有挂起的“宏任务”已经通过setTimeout ()setInterval(),并将在此时间范围内被执行。此外,如果这些宏任务调度新的宏任务,这些宏任务将在相同的时间框架内执行,那么这些宏任务将一直执行到队列中没有更多的宏任务为止,这些宏任务应该在队列中运行Mstorun.毫秒。

jest.runOnlyPendingTimers ()

Executa Somente作为宏任务QueEstãoatualmente吊封(Ou Seja,Apenas As Tarefas Que Foram Enfileiradas PorsetTimeout ()setInterval()AtéestePonto)。qualmente uma das宏任务alummente吊封arto novas宏任务,essas novas tarefasnãoserãoexecutadas por essa chamada。

Issoétil帕拉CenáriosComoAquele OndeOmóduloSendoTestadoagendaráumsetTimeout ()Cuja“回调”议程前setTimeout ()Recursivamente(OR SEJA,o agendamento nunca para)。NessesCenários,塞塞卡塔·德·索达佛罗伦泰没有速度,UM Passo de Cada Vez。

JEST.ADVAMACTIMERSTONEXTTIMER(步骤)

通过所需的毫秒推进所有计时器,以便仅运行下一个时刻/间隔。

可选地,您可以提供步骤,因此它将运行步骤下一个时刻/间隔的数量。

jest.clearAllTimers ()

删除Quaisquer临时升级吊扇Do Sistema de临时审查者。

这是一个重要的时间和程序有孔虫(mas ainda não foram executados),还有serão apagados e nunca terão a oportunidade de executar no future。

jest.gettimercount()

返回仍然留下的假计时器数量。

jest.setsystemtime(现在?:编号|日期)

设置假计时器使用的当前系统时间。在程序运行时模拟用户更改系统时钟的用户。它会影响当前时间,但它本身并不导致例如。定时器到火;如果没有呼吁,他们会尽可能地发射jest.setsystemtime()

注意:此函数仅在使用现代假计时器实现时可用

jest.getRealsystemtime()

嘲笑时间,date.now()也会被嘲笑。如果由于某种原因需要访问实际时间的时间,则可以调用此功能。

注意:此函数仅在使用现代假计时器实现时可用

Misc

jest.setTimeout(超时)

定义O Tempo Limite deExecuçãoPadrãoPara Testes Antes / Depois de Ganchos Em Milissegodos。这仅影响调用此函数的测试文件。

注意:速度的限制execução padrão é 5个第二卡索埃斯特método não第二个。

注意:如果要设置所有测试文件的超时,则会在此处设置一个好地方setupFilesAfterEnv

例子:

笑话 索取 1000 ; // 1 segundo.

jest.retryTimes ()

运行失败的测试n次,直到测试通过或耗尽最大重试次数。这只适用于jest-circus!!

举例说明:

笑话 重试 3. ;
测试 “失败” = > {
预计 真正的 成为 错误的 ;
} ;

Retorna O Objeto.笑话Para encadeamento。