代码之家  ›  专栏  ›  技术社区  ›  GibboK

Jest比较值没有视觉差异。测试阵列时

  •  0
  • GibboK  · 技术社区  · 7 年前

    我需要使用jest测试从refExp返回的数组。

    我收到这个错误:

    Compared values have no visual difference

    目前,我有一个变通方法,我在其中使用JSON.stringify() expect toEqual ,听起来确实像是一个黑客,我想知道我是否可以在没有它的情况下修复它。

    欢迎提出任何意见。

    演示: https://repl.it/repls/VictoriousCapitalProfile

    const REG_EXP_CHECKBOX = /\$\$id=(\w+)(?:&description=(\w+))?\$\$([^$]*(?:\$(?!\$)[^$]*)*$)?/
    describe('regExp', () => {
      it('should match REG_EXP_CHECKBOX', () => {
        expect('- [ ] $$id=uniq_id$$'.match(REG_EXP_CHECKBOX)).toEqual(
          ['$$id=uniq_id$$', 'uniq_id', undefined, undefined],
        )
    
        expect(['a', undefined]).toEqual(['a', undefined]);
      });
    });
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   Miguel Angel    7 年前

    比较数组不是那么简单,因为这两个数组不相等,是不同的对象,具有不同的实例。因此,有两个不相等的数组,没有任何视觉差异。

    您可以做的是拆分响应,并验证每个值,如下所示:

    const add = require('./add');
    const REG_EXP_CHECKBOX = /\$\$id=(\w+)(?:&description=(\w+))?\$\$([^$]*(?:\$(?!\$)[^$]*)*$)?/
    describe('add', () => {
      it('should add two numbers', () => {
        const response = '- [ ] $$id=uniq_id$$'.match(REG_EXP_CHECKBOX);
        expect(response [0]).toEqual('$$id=uniq_id$$');
        expect(response [1]).toEqual('uniq_id');
        expect(response [2]).toBeUndefined();
        expect(response [3]).toBeUndefined();
      });
    });
    

        2
  •  1
  •   Nikita Moshensky    7 年前

    你可以用 Array.from

    代码如下所示( demo ):

    const REG_EXP_CHECKBOX = /\$\$id=(\w+)(?:&description=(\w+))?\$\$([^$]*(?:\$(?!\$)[^$]*)*$)?/
    describe('regExp', () => {
      it('should match REG_EXP_CHECKBOX', () => {
        expect(Array.from('- [ ] $$id=uniq_id$$'.match(REG_EXP_CHECKBOX) || [])).toEqual(
          ['$$id=uniq_id$$', 'uniq_id', undefined, undefined],
        )
      });
    });