笑话比较值没有视觉差异。测试数组时

时间:2018-12-10 21:42:49

标签: javascript jestjs

我需要使用笑话测试refExp返回的数组。

我收到此错误:

Compared values have no visual difference

当前,我有一个解决方法,我正在expecttoEqual中使用JSON.stringify(),这听起来确实像是黑客,我想知道是否可以在没有它的情况下对其进行修复。 / p>

任何想法都值得赞赏。

演示: 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 个答案:

答案 0 :(得分:1)

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

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

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();
  });
});

在这里,您正在测试响应,字符串和未定义的字符串将正确断言。

答案 1 :(得分:1)

您可以使用Array.from函数,该函数可以从类似数组的对象或可迭代的对象中创建浅表复制的Array实例。

代码如下(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],
    )
  });
});