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

Примерсасинхронностью.

Во-первыхвключитеподдержкуbabelвejest,КакОписановруководствеПриступаякработе.

ДавайтесоздадимМодуль,КоторыйполучаетданныепользователяизAPIИвозврашаетимяпользователя。

// user.js.
进口 要求 '。/要求' ;
出口 功能 getusername. 用户身份 {
返回 要求 '/用户/' + 用户身份 然后 用户 => 用户 姓名 ;
}

在上述实施中,我们期待Request.js.模块返回承诺。我们将呼叫链接然后接收用户名。

ТеперьпредставимРеализацию.Request.js.,Котораяидетвсетьиизвлекаетданныенекоторогопользователя:

// Request.js.
const http. = 要求 'http' ;
出口 默认 功能 要求 URL. {
返回 新的 诺言 解决 => {
//Примерthpltзапроса,Кпримерудляизвлечения
//данныхпользователяизAPI。
//дляданногоМодуляИспользуетсямокиз__mocks __ / request.js
http. 得到 { 小路 URL. } 回复 => {
数据 = '' ;
回复 '数据' _数据 => 数据 + = _数据 ;
回复 '结尾' => 解决 数据 ;
} ;
} ;
}

Из-затогочтомынехотимобрашатьсяксетивнашемтестестестестесоздадимМокдлянашегоМодуляRequest.js.впапке.__mocks__(Названиепапкичувствительнокрегистру__mocks__Несработает)。ОнможетвыглядетьпримерноТак:

// __mocks __ / request.js
const 用户 = {
4. { 姓名 'Вася' }
5. { 姓名 'Петя' }
} ;
出口 默认 功能 要求 URL. {
返回 新的 诺言 解决 拒绝 => {
const 用户身份 = 释放 URL. Substr. '/用户/' 长度 10. ;
过程 nexttick. =>
用户 [ 用户身份 ]
解决 用户 [ 用户身份 ]
拒绝 {
错误 'пользовательсid' + 用户身份 + 'Ненайден。'
}
;
} ;
}

现在让我们为自己的异步功能写一下测试。

// __tests __ / user-test.js
笑话 嘲笑 '../要求' ;
进口 * 作为 用户 '../用户' ;
//必须返回承诺的断言。
'与承诺合作' => {
预计 断言 1 ;
返回 用户 getusername. 4. 然后 数据 => 预计 数据 toequal. '标记' ;
} ;

Мывызываем.jest.mock('../请求'),чтобыуказатьJestИспользоватьнаюВручнуюзаданныймок。Ожидает,чтовозврашаемоезначениебудетпромисом,которыйвитогебудетразрешен。Выможетесоздаватьстолькоцепочекпромисов,Сколькохотитеивызывать预计влюбойМомент,ПокавКонцевозврашаеетепромис。

.resolves.

使用不太冗长的方式解决要与任何其他匹配者一起卸载满足承诺的价值。如果承诺被拒绝,则断言将失败。

'与解决方案' => {
预计 断言 1 ;
返回 预计 用户 getusername. 5. 解决 toequal. '保罗' ;
} ;

异步/等待

ТакжевозможнонаписаниеТестовСИспользованиемсинтаксиса异步/等待Воткакбывымоглинаписатьпредыдушиепримеры:这里你是如何从之前的方式编写相同的例子:

//可以使用异步/等待。
'与异步/等待'合作' 异步 => {
预计 断言 1 ;
const 数据 = 等待 用户 getusername. 4. ;
预计 数据 toequal. '标记' ;
} ;
//异步/等待也可以与`.resolves`一起使用。
'与异步/等待和解决并解决' 异步 => {
预计 断言 1 ;
等待 预计 用户 getusername. 5. 解决 toequal. '保罗' ;
} ;

чтобывключитьasync/awaitввашемпроекте,установите@ Babel / Preset-Envивключитештуфункциювфайлеbabel.config.js.

обработкаошибок.

可以使用错误处理错误。抓住方法。确保添加期待验证调用某个数量的断言。否则,履行的承诺不会失败测试:

//使用promise.catch测试异步错误。
'тестируетошибкисиспользованиемпромисов' => {
预计 断言 1 ;
返回 用户 getusername. 2 抓住 E. =>
预计 E. toequal. {
错误 'Пользовательсid2Ненайден。
}
;
} ;
//ИлииспользуяSyync/ await。
'用异步/等待测试错误' 异步 => {
预计 断言 1 ;
尝试 {
等待 用户 getusername. 1 ;
} 抓住 E. {
预计 E. toequal. {
错误 '未找到1的用户。
} ;
}
} ;

。重点

。重点亚搏取款帮手像.resolves.亚搏取款帮手。如果履行承诺,则测试将自动失败。期待.Assertions(数字)Неявляетсяобязательным,НорекомендуетсядляподтвержденияТочногоислаПроверок.Вызванныхвовремятеста。впротивномслучаелегкозабыть返回/等待ВПроверкахсиспользованием.resolves.

//使用“。重点”测试异步错误。
'用拒绝测试错误' => {
预计 断言 1 ;
返回 预计 用户 getusername. 3. 拒绝 toequal. {
错误 '没有找到3的用户。'
} ;
} ;
//或使用async / await与`.lejects`。
'测试异步/等待和拒绝的错误 异步 => {
预计 断言 1 ;
等待 预计 用户 getusername. 3. 拒绝 toequal. {
错误 '没有找到3的用户。'
} ;
} ;

Кодизэтогопримерадоступеннастранице例子/异步

Есливыхотитепротестироватьтаймеры,Как,Например,索取,Обратитевниманиенадокументацию计时器模拟