Мне нужно протестировать массив, возвращаемый из refExp, с помощью jest.
Я получаю эту ошибку:
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]);
});
});



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Сравнить массивы не так-то просто, потому что 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();
});
});
Здесь вы проверяете ответ, и строка и неопределенные значения будут утверждены правильно.
Вы можете использовать функцию Array.from, которая может создавать мелко скопированный экземпляр массива из объекта, подобного массиву или повторяемого объекта.
Код будет выглядеть так (демонстрация):
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],
)
});
});
Обратите внимание на ...|| [], который может порадовать компилятор TS, если вы его используете.
Потрясающий! То, что я искал!