Я пытаюсь сравнить два объекта, чтобы увидеть, одинаковы они с использованием hamcrest для flex-unit, но когда объект имеет вспомогательные объекты, он просто выдает ошибку:Каков правильный способ сравнения as3 объектов с помощью hamcrest
Error: Expected: (An array containing <[object Object]>
but: an array containing <[object Object]> was <[object Object]>
Я хочу, чтобы он сделал assertThat (..., hasProperties (...)); на субобъекте.
Есть ли способ получить это или я должен создать пользовательский соединитель?
EDIT
Пример структуры объекта я хочу тест:
var expected:Object = {
number:1.3,
array:[{
prop1:"val1", prop2:"val2"
}]
anObject:{
propA:1, propB:2
},
}
var objectUnderTest:Object = {
number:1.3,
array:[{
prop1:"val1", prop2:"val2"
}]
anObject:{
propA:1, propB:2
},
}
assertThat("should be the same", objectUnderTest, hasProperties(expected));
, так как ожидалось, и objectUnderTest имеют ту же структуру, тест должен пройти, но возвращает ошибку:
Error: Expected: (An array containing <[object Object]>
but: an array containing <[object Object]> was <[object Object]>
Кроме того, если есть способ сравнить две строки JSON, это тоже будет хорошо.
EDIT2
Это мой окончательный вариант после djib помощи:
package com
{
public function assertEqualsObjects(message:String, object1:Object, object2:Object):Boolean
{
// we have to run it both ways (1-2, 2-1)
return (compare(object1, object2, message + ": object") && compare(object2, object1, message + ": extra"));
}
}
import org.flexunit.asserts.fail;
function compare(object1:Object, object2:Object, parent:String):Boolean
{
var count:int = 0;
for (var s:String in object1)
{
count ++;
if (!object2.hasOwnProperty(s))
{
fail(parent + "." + s + " expected: " + object1[s] + " but was: undefined");
return false;
}
if (!compare(object1[s], object2[s], parent + "." + s))
{
fail(parent + "." + s + " expected: " + object1[s] + " but was: " + object2[s]);
return false;
}
}
if (count == 0 && object1 != object2) // if object has no properties, compare their actual values
{
fail(parent + " expected: " + object1 + " but was: " + object2);
return false;
}
return true;
}
Итак, у вас есть массив с объектами, и вы хотите проверить, что именно? Что объекты в массиве имеют определенные свойства? Или что они имеют определенный тип? Или что это конкретные случаи? – Creynders
Добавлен пример кода. Надеюсь, что это прояснится. – Marcotmp
Он все еще не говорит мне, что вы хотите точно проверить. Вы хотите проверить, что тестируемый объект имеет те определенные свойства с этими точными значениями, или вы хотите проверить, что он просто обладает свойствами «anObject» и «array»? Я имею в виду, насколько глубокой и строгой должна быть проверка? – Creynders