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

使用匹配器

Jest使用“匹配器”让您以不同的方式测试值。本文档将介绍一些常用匹配器。有关完整列表,请参见<一个href="//www.ieatrice.com/docs/expect">预计API文档

常见的匹配器<一个class="hash-link" href="#common-matchers" title="#">#

测试一个值的最简单方法是完全相等。

测试 ( 二加二等于四 , ( ) = > {
预计 ( 2 + 2 ) 托比 ( 4 ) ;
} ) ;

在这段代码中,期望(2 + 2)返回一个“expect”对象。除了调用匹配器之外,您通常不会对这些期望对象做太多的事情。在这段代码中,.toBe (4)是匹配器。当Jest运行时,它会跟踪所有失败的匹补器,以便为您打印出漂亮的错误消息。

托比使用Object.is来检验准确的等式。如果要检查对象的值,请使用toEqual而不是:

测试 ( 对象赋值的 , ( ) = > {
常量 数据 = { 一个 : 1 } ;
数据 ( “两个” ] = 2 ;
预计 ( 数据 ) toEqual ( { 一个 : 1 , 两个 : 2 } ) ;
} ) ;

toEqual递归地检查对象或数组的每个字段。

你也可以测试与匹配器相反的东西:

测试 ( "正数相加不为零" , ( ) = > {
( 一个 = 1 ; 一个 < 10 ; 一个 ++ ) {
( b = 1 ; b < 10 ; b ++ ) {
预计 ( 一个 + b ) 托比 ( 0 ) ;
}
}
} ) ;

真实与否<一个class="hash-link" href="#truthiness" title="#">#

在测试中,有时需要区分未定义的,,,但有时你不想以不同的方式对待它们。Jest包含帮助程序,可以明亚搏取款确说明您想要什么。

  • toBeNull比赛只
  • toBeUndefined比赛只未定义的
  • toBeDefined是相反的toBeUndefined
  • toBeTruthy匹配任何如果语句被认为是正确的
  • toBeFalsy匹配任何如果语句被视为错误

例如:

测试 ( “零” , ( ) = > {
常量 n = ;
预计 ( n ) toBeNull ( ) ;
预计 ( n ) toBeDefined ( ) ;
预计 ( n ) toBeUndefined ( ) ;
预计 ( n ) toBeTruthy ( ) ;
预计 ( n ) toBeFalsy ( ) ;
} ) ;
测试 ( “零” , ( ) = > {
常量 z = 0 ;
预计 ( z ) toBeNull ( ) ;
预计 ( z ) toBeDefined ( ) ;
预计 ( z ) toBeUndefined ( ) ;
预计 ( z ) toBeTruthy ( ) ;
预计 ( z ) toBeFalsy ( ) ;
} ) ;

您应该使用最精确地符合您希望您的代码要做的事情的匹配器。

数字<一个class="hash-link" href="#numbers" title="#">#

大多数比较数字的方法都有匹配器。

测试 ( “2 + 2” , ( ) = > {
常量 价值 = 2 + 2 ;
预计 ( 价值 ) toBeGreaterThan ( 3. ) ;
预计 ( 价值 ) toBeGreaterThanOrEqual ( 3.5 ) ;
预计 ( 价值 ) toBeLessThan ( 5 ) ;
预计 ( 价值 ) toBeLessThanOrEqual ( 4.5 ) ;
// toBe和toEqual对于数字来说是等价的
预计 ( 价值 ) 托比 ( 4 ) ;
预计 ( 价值 ) toEqual ( 4 ) ;
} ) ;

对于浮点数相等,使用toBeCloseTo而不是toEqual,因为您不希望测试依赖于一个微小的舍入错误。

测试 ( '加浮点数' , ( ) = > {
常量 价值 = 0.1 + 0.2 ;
/ /期望(值).toBe (0.3);由于舍入误差,这将不能工作
预计 ( 价值 ) toBeCloseTo ( 0.3 ) ; / /这个作品。
} ) ;

字符串<一个class="hash-link" href="#strings" title="#">#

您可以使用toMatch:

测试 ( “团队中没有我” , ( ) = > {
预计 ( “团队” ) toMatch ( / / ) ;
} ) ;
测试 ( '但是克里斯托弗有一个'停止' ' , ( ) = > {
预计 ( “Christoph” ) toMatch ( / 停止 / ) ;
} ) ;

数组和iterable<一个class="hash-link" href="#arrays-and-iterables" title="#">#

你可以检查数组或可迭代对象是否包含特定的项toContain:

常量 shoppingList = (
“尿布” ,
“纸巾” ,
的垃圾袋 ,
“纸巾” ,
“啤酒” ,
] ;
测试 ( “购物单上有啤酒” , ( ) = > {
预计 ( shoppingList ) toContain ( “啤酒” ) ;
预计 ( ( shoppingList ) ) toContain ( “啤酒” ) ;
} ) ;

异常<一个class="hash-link" href="#exceptions" title="#">#

如果您想测试某个特定函数在被调用时是否抛出错误,请使用toThrow

函数 compileAndroidCode ( ) {
错误 ( 你使用了错误的JDK ) ;
}
测试 ( “编译android按预期运行” , ( ) = > {
预计 ( ( ) = > compileAndroidCode ( ) ) toThrow ( ) ;
预计 ( ( ) = > compileAndroidCode ( ) ) toThrow ( 错误 ) ;
//你也可以使用准确的错误消息或regexp
预计 ( ( ) = > compileAndroidCode ( ) ) toThrow ( 你使用了错误的JDK ) ;
预计 ( ( ) = > compileAndroidCode ( ) ) toThrow ( / JDK / ) ;
} ) ;

注意:抛出异常的函数需要在包装函数中调用,否则toThrow断言将会失败。

和更多的<一个class="hash-link" href="#and-more" title="#">#

这只是尝一下。有关匹配器的完整列表,请查看<一个href="//www.ieatrice.com/docs/expect">参考文档yabo2013

一旦您了解了可用的匹配器,一个很好的下一步是检查Jest是如何允许您的<一个href="//www.ieatrice.com/docs/asynchronous">测试异步代码