2015-01-15 4 views
1

Я тестирую некоторую логику сериализации и десериализации в довольно сложном приложении JavaScript, используя QUnit, но у меня возникают проблемы с передачей моих тестов.QUnit - как сравнить два сложных объекта

этих двух проверок, которые выглядят, как будто они должны делать правильные вещи являются deepEqual или propEqual, однако, ни кажется, делает именно то, что я хочу:

Если я использую deepEqual и два объекта не совпадают, утверждение терпит неудачу, и это показывает мне разницу, указывающую на проблемы. Однако, если нет разницы, я просто получаю сообщение об ошибке, показывающее первый параметр, переданный на проверку равенства как «ожидаемое» значение без второго параметра или любое указание на то, что разница. Я думаю, что это возможно потому, что они не одни и те же объекты, но я не уверен.

Если я использую propEqual, я просто получаю сообщение о том, что RangeError: Maximum call stack size exceeded at String.match (native) и тест терпит неудачу.

Возможно ли выполнить этот тип чеков с помощью QUnit? Если да, то что я делаю неправильно?

+0

Можете ли вы показать нам тестовый код и, возможно, объекты, которые вы сравниваете (или, может быть, только часть их)? – jakerella

+0

Как примечание стороны, 'deepEqual' не требует, чтобы объекты были одним и тем же элементом в памяти, он разбивается на объект для сравнения отдельных свойств. – jakerella

+0

@jakarella, честно говоря, я не могу поделиться деталями, так как вам понадобится около двух третей моего приложения, чтобы иметь возможность видеть все, что сериализуется и десериализоваться, а тест - это просто «var a = new myType(); var b = a.serialise(); var c = b.deserialise(); deepEqual (a, c); ' – glenatron

ответ

0

Для всех, кто столкнулся со второй проблемой с propEqual. Описывая выше, проблема, вызывающая у меня проблемы, была круговой ссылкой, где дочерний объект содержал ссылку на ее родительский элемент, который затем отправлял QUnit во вращение. Можно настроить функцию objectValues так, чтобы она отмечала объекты как «видимые», когда они уже обработали их и обрабатывает только невидимые объекты. С этим на месте сравнение работает для меня.

Смежные вопросы