Совместимая с Jasmine библиотека сравнения объектов TypeScript
Отказ от ответственности: функции равенства объектов TypeScript (и, в более общем случае, JavaScript) обсуждались в массовом порядке здесь (например, /questions/13047201/kak-opredelit-ravenstvo-dlya-dvuh-obektov-javascript/55031693#55031693) и везде (например, https://bobbyhadz.com/blog/ машинопись-объект-сравнение ). Я не ищу никаких фрагментов кода (их более чем достаточно в разделе Как определить равенство для двух объектов JavaScript?). Существуют различные библиотеки ( underscore, lodash, fast-deep-equal, fast-equal, nano-equal и т. д.) для проверки на равенство объектов, но трудно понять различия между ними.
Чего мне не хватает в большинстве вопросов и ответов о равенстве объектов TypeScript, так это модульного тестирования .
Потому что среда тестирования решает, что следует считать «равным».
Я использую Jasmine для модульных тестов, поэтому метод управляет равенством объектов.
Например, не согласуется с Жасмин, потому чтоJSON.stringify(…)
чувствителен к порядку свойств:
JSON.stringify({a:1, b:2}) != JSON.stringify({b:2, a:1});
expect({a:1, b:2}).toEqual({b:2, a:1});
Для полной согласованности проверка на равенство должна давать тот же результат, что и у Жасмин, для всех мыслимых входных данных.
Я знаю, что Jasmine поддерживает пользовательские тестеры равенства , но их следует использовать только в особых случаях.
Вопрос: Являются ли какие-либо из вышеупомянутых библиотек равенства полностью совместимыми с Jasmine ?toEqual(…)
?
Если ни один из них не является таковым, какие крайние случаи дают результаты, отличные от результатов Жасмин?
[Редактировать: вопрос перефразирован, чтобы не просить субъективных советов о сторонних библиотеках; добавил в список еще две библиотеки равенства; разъяснил, что я имею в виду под полной согласованностью с Жасмин.]