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

模仿德文赛ES6

jest se pueduer para simular clases de es6 que importan a los Archivos que deseas probar。

Las Clases de Es6儿子Funciones建设者Con Un Poco de Sintaxis Adicional。POR Lo Tanto,CualquierSimulación帕拉UNA Clase ES6 Debe Ser UNA Funcion O UNA Clase ES6实际(Que Es,De Nuevo,OtraFunción)。Entonces Puedes Simular Usando模拟功能

联合国Ejemero de Clase ES6

Usaremos联合国ejealto ideado de una clase que复制了Archivos de Sonido,SoundPlayer.y una clase de consufidores que una esa clase,SoundPlayerConsumer.。Simularemos.SoundPlayer.en nuestras pruebas paraSoundPlayerConsumer.

// solocuctor.js.
出口 默认 班级 复制品 {
构造函数 {
这个 变速jemhto. = “valorEjemplo” ;
}
再演员onido nombreDeArchivo {
控制台 日志 'solocuciendo Archivo de Sonido' + nombreDeArchivo ;
}
}
// fundidisor.js.
进口 复制品 './reproductor' ;
出口 默认 班级 消费者 {
构造函数 {
这个 复制品 = 新的 复制品 ;
}
recrocuceAlgocool. {
const NombrecearchivoCool. = 'cancion.mp3' ;
这个 复制品 再演员onido NombrecearchivoCool. ;
}
}

LAS 4 Formas de Crear Una Clase Mock ES6

模仿Automáticos.

莱南多A.jest.mock('./ sound-player')Arroja Una“SimulaciónAutomática”ttil que puede Usar para espiar las llamadas一个los contructores de clase y todos susmétodos。瑞伊·联合国建设仪Simulado,Y瑞杰托斯SUSMétodos孔Funciones deSimulación.que siempre arrojan.不明确的。Las Llamadas A LosMétodosSeAlmacenanentheautomaticmock.mock.instances [index] .methodname.mock.calls

Ten en Cuenta Que Si Utilizas Funciones de Flecha(=>)enttus clases,estasserán parte del mock。这是我们要做的事,没有están介绍了目标的原型,我们的资料是función。

Si no Necesitas reementazarlaimenticaióndaClase,Esta EslaOpciónMásFácilAlaIngionUrar。Por Ejetrevo:

进口 复制品 './reproductor' ;
进口 消费者 './consumidor' ;
笑话 嘲笑 './reproductor' ; //复制品es es ahora联合国建设者模拟
摘要 => {
// Borra Todas Las Instancias Y Llamadas Al Constructor Y TodosLosMétodos:再生乐队。
} ;
'Podemos Verificar Que El ConsumidorLlalóAl构造函数de la Clase' => {
const 消费者 = 新的 消费者 ;
预计 复制品 tohavebeencalledtimes. 1 ;
} ;
'Podemos Verificar Que El ConsumidorLlalóAGrúnMétodode la Instancia' => {
// uestra que mockclear()estáfucionando:
预计 复制品 不是 TohaveBeencalled. ;
const 消费者 = 新的 消费者 ;
//构造函数debióhowssido llamado nuevamente:
预计 复制品 tohavebeencalledtimes. 1 ;
const NombrecearchivoCool. = 'cancion.mp3' ;
消费者 recrocuceAlgocool. ;
// mock.instances Esta Disponible Con MocksAutomáticos:
const InstanciamockDereProductor. = 复制品 嘲笑 实例 [ 0. ] ;
const mockdereproducirarchivolsonido = InstanciamockDereProductor. 再演员onido ;
预计 mockdereproducirarchivolsonido 嘲笑 呼叫 [ 0. ] [ 0. ] toequal. NombrecearchivoCool. ;
//相同的一个LaVerificación前提:
预计 mockdereproducirarchivolsonido Tohavebeencalledwith. NombrecearchivoCool. ;
预计 mockdereproducirarchivolsonido tohavebeencalledtimes. 1 ;
} ;

模拟手册

克雷亚联合国模拟手册Almacenando UnaImportyAciónMocken La Carpeta__mocks__。Esto Te PermiteEspecificarLaimenticaAcifiamión,Y Puede Ser Uterizada ATravésde Varios Archivos De测试。

/ / __mocks__ / reproductor.js
// Importa EstaExportaciónMombradaen Tu Archivo测试:
出口 const mockdereproducirarchivolsonido = 笑话 FN. ;
const 嘲笑 = 笑话 FN. 模仿 => {
返回 { 再演员onido mockdereproducirarchivolsonido } ;
} ;
出口 默认 嘲笑 ;

Importa LaSimulaciónyelmétododesimulacióncomartidopor todas las instancias:

// finistidor.test.js.
进口 复制品 { Mockreproducirarchivoiro onido } './reproductor' ;
进口 消费者 './consumidor' ;
笑话 嘲笑 './reproductor' ; //复制品es es ahora联合国建设者模拟
摘要 => {
// Borra Todas Las Instancias Y Llamadas Al Constructor Y TodosLosMétodos:再生乐队。
Mockreproducirarchivoiro onido 笨拙 ;
} ;
'Podemos Verificar Que El ConsumidorLlalóAl构造函数de la Clase' => {
const 消费者 = 新的 消费者 ;
预计 复制品 tohavebeencalledtimes. 1 ;
} ;
'Podemos Verificar Que El ConsumidorLlalóAGrúnMétodode la Instancia' => {
const 消费者 = 新的 消费者 ;
const NombrecearchivoCool. = 'cancion.mp3' ;
消费者 recrocuceAlgocool. ;
预计 mockdereproducirarchivolsonido Tohavebeencalledwith. NombrecearchivoCool. ;
} ;

莱纳达jest.mock()Con Elparámetrodefábricademódulo

jest.mock(ruta,fabricademodulo)Toma联合国Argumento.Fabrica de Modulo.。Unafábricademóduloes unafunciónqueegresa联合国嘲笑。

Para Crear Un Mock De UnaFunción建设者,LafábricadmóduloBebeRegresar UnaFunción构造函数。en otras palabras,LaFábricademóduloQue unafunciónque trearsa unafunción - unafuncióndealtonorden,o hof,Por Su Siglas enInglés(高阶功能)。

进口 复制品 './reproductor' ;
const Mockreproducirarchivoiro onido = 笑话 FN. ;
笑话 嘲笑 './reproductor' => {
返回 笑话 FN. 模仿 => {
返回 { 再演员onido Mockreproducirarchivoiro onido } ;
} ;
} ;

limitación我的论点是fábrica我的模是什么,你有一个jest.mock()儿子11个Hasta El Inicio del Archivo,没有ES Posible Defir Una变量Y Luego Usarla en LaFábrica。SE Hace联合国ExcepciónAlaariables que empiecen con la palabra'mock'。}依赖De Ti Garantizar de queseráninicializadas a tiempo!POR EJETRIES,LO SIGUIENTEARROJARÁ联合国错误FUERA DE accance(范围外)Debido Al USO'BENS en Lugar de'mock'en laadjiónde la变量:

// nota:EstoFallará
进口 复制品 './reproductor' ;
const fakereproducirarchivolsonido = 笑话 FN. ;
笑话 嘲笑 ' / 复制品 => {
返回 笑话 FN. 模仿 => {
返回 { 再演员onido fakereproducirarchivolsonido } ;
} ;
} ;

Sustituir el Mock Utilizando模仿()O.模仿once()

Puedes雷肯扎尔Todos Los Mocks Anteriorees Para Cambiar LaImpementAción,Para UnoAsíComoPara Todos Los Test,Al Llamar模仿()假装存在。

Las Llamadas A Jest.Mock儿子Elevadas Al Principio delCódigo。Puedes Especificar Una Mock Postiremente,Por Ejeallo,ENbeforeall(),电话模仿()(o.模仿once())EN El Mock存在En Lugar de Usararlámetrodefábrica。EstoTambiénLepereCamiarLaSimulaciónTenrePruebas,Si Se Necesita:

进口 复制品 './reproductor' ;
进口 消费者 './consumidor' ;
笑话 嘲笑 './reproductor' ;
描述 'CUANDO再生家ARRARRJA联合国错误' => {
Beforeall. => {
复制品 模仿 => {
返回 {
再演员onido => {
新的 错误 '错误de prueba' ;
}
} ;
} ;
} ;
'deberíaarrojar联合国错误al llamar是一个繁殖爱好者 => {
const 消费者 = 新的 消费者 ;
预计 => 消费者 recrocuceAlgocool. tothrow. ;
} ;
} ;

Profundidad:Entendiendo Las Funciones构造函数模拟

Construir tus funciones de constructor de Mock Utilizodojest.fn()。模仿()Hace Que Los Mock Se VeanMásFormadosde Lo Que en Realidad儿子。Estasección穆斯特拉Cómo贱蠕动Tus TUS Mock Para IlustrarCómoFuncionael SimularMódulos咕咕咕噜声。

Mock Manual de Otra Clase ES6

SI定义UNA Clase ES6 Utilizando El Mismo Nombre de Archivo Que La Clase Mock En La Carpeta__mocks__,ésteservirácomoel模拟。Esta claseseráultizadaen lugar de la clase真实。Esto Te渗透inyEctar unamideveracióndepruebapara la clase,佩罗没有Proporciona Una Forma de Espiar Las Las Las Lamadas。

Para Un Ejetimo Ideado,LaProyecciónPodríaVersí:

// __mocks __ / sound-player.js
出口 默认 班级 SoundPlayer. {
构造函数 {
控制台 日志 " Mock SoundPlayer:构造函数被调用" ;
}
playsoundfile. {
控制台 日志 '模拟SoundPlayer:PlaySoundFile被称为' ;
}
}

Mock Simple Utilitando联合国ParámetrodeFábricademódulo

LaFuncióndefábricadeMóduloPasadaajest.mock(ruta,fabricademodulo)PuedeSer UnaFuncióndaltoorden que gregresa unafunción*。EstoPermiciráLlamara新的en lasimulación。De Nuevo,Esto Te渗透inyEctar联合国Comportamiento Diferente Para Las Pruebas,佩罗没有Proporciona Una Forma de Espiar Llamadas。

* LaFuncióndefábricadelMóduloBebeDevolver UnaFunción

Para Crear Un Mock De UnaFunción建设者,LafábricadmóduloBebeRegresar UnaFunción构造函数。en otras palabras,LaFábricademóduloQue unafunciónque trearsa unafunción - unafuncióndealtonorden,o hof,Por Su Siglas enInglés(高阶功能)。

笑话 嘲笑 './reproductor' => {
返回 功能 {
返回 { 再演员onido => { } } ;
} ;
} ;

Nota:Las Funciones de Flecha没有Funcionaran

Ten en Cuenta que lasimulaciónno puede ser Unafuncióndeflechaporque no se渗透骆驼a新的en unafuncióndeflechaenjavascript。Asíqueesto没有funciona:

笑话 嘲笑 './sound-player' => {
返回 => {
//不起作用;箭头函数无法用新的函数调用
返回 { playsoundfile. => { } } ;
} ;
} ;

EstoArrojará.typeerror:_soundplayer.default不是构造函数(错误de tipo:soundplayer.default no ES UN Constructor),Menos Que ElCódigo海译者AS5,Por Ejemerto Por@ Babel / Preset-Env。(ES5没有函数类,只有serán transpiladas是一个函数简单体。)

Haciendo Seguimiento del Uso(Espiando Al Mock)

inyectar unamideveracióndupruebaesútil,pero probablementedesearásprobar si el constructor de clase ylosmétodosestánsiendo llamados con losparámetroscrectos。

Espiando Al构造函数

Para Rastreara allamadas Al Constructor,雷埃拉达LaFuncióndevueltapor laFuncióndealtoorden andenfuncióndemockde Jest。CréaloCon.jest.fn(),Y Luego Especifica SuImpeedAciónCon模仿()

进口 SoundPlayer. './sound-player' ;
笑话 嘲笑 './sound-player' => {
//工作并允许您检查构造函数调用:
返回 笑话 FN. 模仿 => {
返回 { playsoundfile. => { } } ;
} ;
} ;

EstoNoSpilitiráSpreccioncionarel Uso de Nuestra Clase Mock,Utilizandosolocutor.mock.calls.期望(复制品).tohavebeencalled();o su scientente cercano期待(再生or.mock.calls.length).toequal(1);

CREANDO MOCKS PARA导出否默认

Si la clase.ES LaExportación默认DelMódulo,entonces necesitas devolver联合国objeto con联合国Atributo llamadocómoexcoepacióndalain。

进口 { 复制品 } './reproductor' ;
笑话 嘲笑 './reproductor' => {
// Funciona Y Te Permite Verificar Llamadas Al Constructor:
返回 {
复制品 笑话 FN. 模仿 => {
返回 { 再演员onido => { } } ;
}
} ;
} ;

EspiandoMétodosdeduestraclase

Nuestra Clase SimuladaNecesitaráProporcionarCualquierFunciónMiembro(playsoundfile.en el ejeallo)queserállamadadurantenuestras pruebas,o bien oneDendremos联合国错误Por Llamar UnaFunciónque没有存在。Pero Probablmente Querramos Tambien Espiar Llamadas AEsosMétodos,Para Asegurar de Que Fueron Lllamados Con LosParámetrosesperados。

UN NUEVO OBJETOSeráCraeCADAVEZQue LaSimulacióndeLafiónCurnersoraSea Las Durante Las Prufebas。Para EspadasdeMétodoen Todos Estos Objetos,Poblamosplaysoundfile.Con OtraFuncióndeimulación,y Almacenamos Una Referencia para esa mismafuncióndeimulaciónnennuestro Archivo de Prueba,Para QueEstéImperanibleDutanteLas Pruebas。

进口 SoundPlayer. './sound-player' ;
const 模仿oundfile. = 笑话 FN. ;
笑话 嘲笑 './sound-player' => {
返回 笑话 FN. 模仿 => {
返回 { playsoundfile. 模仿oundfile. } ;
//现在我们可以跟踪对playsoundfile的调用
} ;
} ;

EL Iditivente deSimulaciónManualde EstoSería:

// __mocks __ / sound-player.js
//将此命名导出导入测试文件
出口 const 模仿oundfile. = 笑话 FN. ;
const 嘲笑 = 笑话 FN. 模仿 => {
返回 { playsoundfile. 模仿oundfile. } ;
} ;
出口 默认 嘲笑 ;

El USO ES类似A LaFuncióndefábricadelMódulo,SóloQue Puede Omitir El Segundo Argumento dejest.mock(),YDeberáImporearelmétodosimulado a su Archivo de Prueba,Puesto Que Ya没有esimedoahí。利用La Rutademódulo原始帕拉Eso;没有包含__mocks__

Limpiando Entre Pruubas.

Para Vaciar El Registregs de Llamadas A LaFunciónBacketureade Simulaciones YSusMétodos,莱茵莫斯岛MockClear()en lafunción.前提()

摘要 => {
SoundPlayer. 笨拙 ;
模仿oundfile. 笨拙 ;
} ;

ejetrepo合成

Aquítiene联合国Archivo de prueba properno el culeriza联合国Parámetrodefábricademódulosparajest.mock.

// sound-player-configer.test.js
进口 SoundPlayer. './sound-player' ;
进口 SoundPlayerConsumer. './sound-player-consumer' ;
const 模仿oundfile. = 笑话 FN. ;
笑话 嘲笑 './sound-player' => {
返回 笑话 FN. 模仿 => {
返回 { playsoundfile. 模仿oundfile. } ;
} ;
} ;
摘要 => {
SoundPlayer. 笨拙 ;
模仿oundfile. 笨拙 ;
} ;
“消费者应该能够在SoundPlayer上调用新() => {
const SoundPlayerConsumer. = 新的 SoundPlayerConsumer. ;
//确保构造函数创建了对象:
预计 SoundPlayerConsumer. Tobeththy. ;
} ;
“我们可以检查消费者是否称为类构造函数' => {
const SoundPlayerConsumer. = 新的 SoundPlayerConsumer. ;
预计 SoundPlayer. tohavebeencalledtimes. 1 ;
} ;
“我们可以检查Class实例上的消费者是否称为方法' => {
const SoundPlayerConsumer. = 新的 SoundPlayerConsumer. ;
const coolsoundfilename. = 'song.mp3' ;
SoundPlayerConsumer. Playsometingcool. ;
预计 模仿oundfile. 嘲笑 呼叫 [ 0. ] [ 0. ] toequal. coolsoundfilename. ;
} ;