跳转到主要内容
版本:26.倍

unejplo de异步

在初级的路加,可以把所有的东西都当作笑话来讲la guia

让我们实现一个模块,它从API获取用户数据并返回用户名。

/ / user.js
进口 请求 “/请求。” ;
出口 函数 getUserName ( 用户标识 ) {
返回 请求 ( ' /用户/ ' + 用户标识 ) 然后 ( 用户 = > 用户 的名字 ) ;
}

在上面的实现中,我们期望request.js模块返回一个承诺。我们把电话连接到然后接收用户名。

现在想象一个实现request.js它会到网络上获取一些用户数据:

/ / request.js
常量 http = 需要 ( “http” ) ;
出口 默认的 函数 请求 ( url ) {
返回 承诺 ( 解决 = > {
//通过http请求查询
//使用API的datos。
//该模块正在__mocks__/request.js中被模拟
http 得到 ( { 路径 : url } , 响应 = > {
数据 = ;
响应 ( “数据” , _data = > ( 数据 + = _data ) ) ;
响应 ( “结束” , ( ) = > 解决 ( 数据 ) ) ;
} ) ;
} ) ;
}

因为我们不想在测试中进入网络,所以我们将为我们的request.js模块的__mocks__文件夹(该文件夹区分大小写,__MOCKS__不会工作)。Podría ser algo como esto:

/ / __mocks__ / request.js
常量 用户 = {
4 : { 的名字 : “马克” } ,
5 : { 的名字 : “保罗” } ,
} ;
出口 默认的 函数 请求 ( url ) {
返回 承诺 ( ( 解决 , 拒绝 ) = > {
常量 用户标识 = 方法用于 ( url 字符串的子串 ( ' /用户/ ' 长度 ) , 10 ) ;
过程 nextTick ( ( ) = >
用户 ( 用户标识 ]
吗? 解决 ( 用户 ( 用户标识 ] )
: 拒绝 ( {
错误 : “用户” + 用户标识 + “没有找到”。 ,
} ) ,
) ;
} ) ;
}

今天我要写一份关于这次活动的报告asíncrona。

/ / __tests__ / user-test.js
开玩笑 模拟 ( “. . /请求” ) ;
进口 * 作为 用户 “. . /用户” ;
//必须返回promise的断言。
( “与承诺” , ( ) = > {
预计 断言 ( 1 ) ;
返回 用户 getUserName ( 4 ) 然后 ( 数据 = > 预计 ( 数据 ) toEqual ( “马克” ) ) ;
} ) ;

Llamamosjest.mock (' . ./请求”)一个笑话,一个实用软件的模拟手册。Se espera有多少勇气可以解决这个问题。你可以随心所欲地做出承诺,然后打电话预计任何时候,只要你在最后返回一个承诺。

.resolves#

有一种更简洁的使用方法解决了将已实现的promise的值与任何其他匹配器一起展开。如果承诺被拒绝,断言将失败。

( “与解析” , ( ) = > {
预计 断言 ( 1 ) ;
返回 预计 ( 用户 getUserName ( 5 ) ) 解决了 toEqual ( “保罗” ) ;
} ) ;

异步/等待#

使用异步/等待语法也是可能的。下面是你如何写之前的例子:

// async/await可以被使用。
( “与异步/等待” , 异步 ( ) = > {
预计 断言 ( 1 ) ;
常量 数据 = 等待 用户 getUserName ( 4 ) ;
预计 ( 数据 ) toEqual ( “马克” ) ;
} ) ;
// async/await也可以与' .resolve '一起使用。
( '与async/await和resolved一起工作' , 异步 ( ) = > {
预计 断言 ( 1 ) ;
等待 预计 ( 用户 getUserName ( 5 ) ) 解决了 toEqual ( “保罗” ) ;
} ) ;

要在项目中启用async/await,请安装@babel / preset-env并在你的babel.config.js文件。

控制误差#

我们的错误是我们要去método.catch。Asegurate de anadir调查expect.assertions请告诉我你的名字número我的名字están谢谢你。相反,我们也不知道hará这个测试是怎样的:

//使用Promise.catch测试异步错误。
( “带有承诺的测试错误” , ( ) = > {
预计 断言 ( 1 ) ;
返回 用户 getUserName ( 2 ) ( e = >
预计 ( e ) toEqual ( {
错误 : '用户2未找到。' ,
} ) ,
) ;
} ) ;
//或使用async/await。
( '带有异步/await的测试错误' , 异步 ( ) = > {
预计 断言 ( 1 ) ;
试一试 {
等待 用户 getUserName ( 1 ) ;
} ( e ) {
预计 ( e ) toEqual ( {
错误 : '用户1未找到' ,
} ) ;
}
} ) ;

.rejects#

.rejects亚搏取款助手的工作方式是.resolves亚搏取款帮手。如果我们有条件,我们就测试fallará automáticamente。expect.assertions(数量)是否需要但建议验证一定数量断言在测试过程中调用。否则,我们很容易忘记忘记返回/等待.resolves断言。

//使用' .rejects '测试异步错误。
( “带有拒绝的测试错误” , ( ) = > {
预计 断言 ( 1 ) ;
返回 预计 ( 用户 getUserName ( 3. ) ) 拒绝 toEqual ( {
错误 : '用户3未找到' ,
} ) ;
} ) ;
//或使用async/await与' .rejects '。
( '使用异步/await测试错误并拒绝' , 异步 ( ) = > {
预计 断言 ( 1 ) ;
等待 预计 ( 用户 getUserName ( 3. ) ) 拒绝 toEqual ( {
错误 : '用户3未找到' ,
} ) ;
} ) ;

这个例子的代码可以在下面找到例子/异步

如果你想测试计时器,比如setTimeout看一看定时器模拟文档。