美文网首页
Jest 匹配器 (Matcher)

Jest 匹配器 (Matcher)

作者: Levid_GC | 来源:发表于2018-07-09 12:48 被阅读93次

    通用匹配器

    toBe

    示例:

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

    toBe 使用 Object.is 来实现精确匹配。

    toEqual

    示例:

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

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

    真假值

    • toBeNull 仅匹配 null
    • toBeUndefined 仅匹配 undefined
    • toBeDefinedtoBeUndefined 相对
    • toBeTruthy 匹配真值
    • toBeFalsy 匹配假值

    提示:+0, -0, false, undefined, null, '', NaN 为假值,其余都为真值。

    示例:

    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 和 toEqual 在数字类型上作用等同
      expect(value).toBe(4);
      expect(value).toEqual(4);
    });
    

    由于浮点数的舍入问题,对于浮点数的相等判断请使用 toBeCloseTo

    示例:

    test('adding floating point numbers', () => {
      const value = 0.1 + 0.2;
      // expect(value).toBe(0.3);         因为舍入问题的存在,这种判断不奏效。
      expect(value).toBeCloseTo(0.3);  // 这种判断有用。
    });
    

    字符串

    字符串数据类型可使用正则表达式进行匹配判断。

    示例:

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

    数组

    判断数组中是否存在某个特定的元素。

    示例:

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

    异常

    测试某个函数抛出异常。

    示例:

    function compileAndroidCode() {
      throw new ConfigError('you are using the wrong JDK');
    }
    
    test('compiling android goes as expected', () => {
      expect(compileAndroidCode).toThrow();
      expect(compileAndroidCode).toThrow(ConfigError);
    
      // 您同样可以使用明确的错误消息或正则表达式
      expect(compileAndroidCode).toThrow('you are using the wrong JDK');
      expect(compileAndroidCode).toThrow(/JDK/);
    });
    

    参考资料

    相关文章

      网友评论

          本文标题:Jest 匹配器 (Matcher)

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