我需要使用笑话测试refExp返回的数组。
我收到此错误:
Compared values have no visual difference
当前,我有一个解决方法,我正在expect
和toEqual
中使用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]);
});
});
答案 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],
)
});
});