美文网首页
Jest - 使用匹配器 Using Matchers

Jest - 使用匹配器 Using Matchers

作者: 小黄人get徐先生 | 来源:发表于2019-08-25 12:01 被阅读0次

    Jest 是用 ”匹配器(matchers)让你以不同的方式测试值。这个文档将介绍一些通用的匹配器。完整的列表,查看 expect API doc

    通用匹配器

    最简单的方式,测试两个值是否相等。

    test('two plus two is four', () => {
      expect(2 + 2).toBe(4);
    });
    

    在这段代码中,expect(2 + 2)返回一个 "expectation" 对象。通常,您不会对这些期望对象做太多操作,除非对它们调用匹配器。在这段代码中,.toBe(4) 是一个匹配器。当 Jest 运行,它追踪所有失败的匹配器为了能打印出漂亮的错误信息。

    toBe 使用 Object.is 来测试相等。如果你想检查对象的值,可以使用 toEqual

    test('object assignment', () => {
      const data = {one: 1};
      data['two'] = 2;
      expect(data).toEqual({one: 1, two: 2});
    });
    

    toEqual 递归地检查对象或数组中的每个字段。
    你也可以测试匹配器的反面:

    test('adding positive numbers is not zero', () => {
      for (let a = 1; a < 10; a++) {
        for (let b = 1; b < 10; b++) {
          expect(a + b).not.toBe(0);
        }
      }
    });
    
    真实与否

    在测试中,你有时候需要区分 undefinednullfalse,但是有些时候你不想区别对待它们。Jest 包含了一些辅助方法,可以让你明确地表达你想要什么。

    • toBeNull 匹配 null
    • toBeUndefined 匹配 undefined
    • toBeDefinedtoBeUndefined 相反
    • toBeTruthy 匹配 if 视为 true 的任何内容
    • toBeFalsy 匹配 if 视为 false 的任何内容

    例如:

    test('null', () => {
      const n = null;
      expect(n).toBeNull();
      expect(n).toBeDefined();
      expect(n).not.toBeUndefined();
      expect(n).not.toBeTruthy();
      expect(n).toBeFalsy();
    });
    
    test('zero', () => {
      const z = 0;
      expect(z).not.toBeNull();
      expect(z).toBeDefined();
      expect(z).not.toBeUndefined();
      expect(z).not.toBeTruthy();
      expect(z).toBeFalsy();
    });
    

    您应该使用最精确地对应于您希望代码执行的操作的匹配器。

    数字

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

    test('two plus two', () => {
      const value = 2 + 2;
      expect(value).toBeGreaterThan(3);
      expect(value).toBeGreaterThanOrEqual(3.5);
      expect(value).toBeLessThan(5);
      expect(value).toBeLessThanOrEqual(4.5);
    
      // toBe and toEqual are equivalent for numbers
      expect(value).toBe(4);
      expect(value).toEqual(4);
    });
    

    对于浮点等式,使用 toBeCloseTo 而不是 toEqual,因为您不希望测试依赖于一个很小的四舍五入误差。

    字符串

    你可以使用正则检查字符串通过 toMatch

    test('there is no I in team', () => {
      expect('team').not.toMatch(/I/);
    });
    
    test('but there is a "stop" in Christoph', () => {
      expect('Christoph').toMatch(/stop/);
    });
    
    数组和可迭代

    你可以检查数组或可迭代包含特定的条目通过使用 toContain

    const shoppingList = [
      'diapers',
      'kleenex',
      'trash bags',
      'paper towels',
      'beer',
    ];
    
    test('the shopping list has beer on it', () => {
      expect(shoppingList).toContain('beer');
      expect(new Set(shoppingList)).toContain('beer');
    });
    
    异常

    如果你想特使特定的函数被调用时抛出一个异常,使用 toThrow

    function compileAndroidCode() {
      throw new ConfigError('you are using the wrong JDK');
    }
    
    test('compiling android goes as expected', () => {
      expect(compileAndroidCode).toThrow();
      expect(compileAndroidCode).toThrow(ConfigError);
    
      // You can also use the exact error message or a regexp
      expect(compileAndroidCode).toThrow('you are using the wrong JDK');
      expect(compileAndroidCode).toThrow(/JDK/);
    });
    
    更多

    这只是一小部分。完整的匹配器列表,可以查看

    相关文章

      网友评论

          本文标题:Jest - 使用匹配器 Using Matchers

          本文链接:https://www.haomeiwen.com/subject/foshectx.html