Ситуация такова: я хочу проверить функцию my, которая возвращает массив объектов. Объекты не имеют перечислимых свойств, а взяты из общего кеша/хранилища.Используйте идентификаторы объектов при использовании QUnit.deepEqual() в массиве
В моих тестовых ящиках теперь я хочу проверить правильность содержимого возвращаемого массива. Поэтому я предположил, что deepEqual()
будет функция использовать, но тесты на самом деле вернуть это (уменьшило TestCase немного):
QUnit.test("array of objects", function(assert) {
// create two objects
var o1 = new Obj(1),
o2 = new Obj(2);
// compare objects themselves
assert.notEqual(o1, o2, 'different objects'); // success
// compare identical arrays
assert.deepEqual([ o1 ], [ o1 ], 'identical arrays - deepEqual'); // success
// compare different arrays
assert.notDeepEqual([ o1 ], [ o2 ], 'different arrays - deepEqual'); // fail
});
// some sample object
function Obj(){}
(я также испытанный propEqual()
увидеть, если один работает здесь.)
Таким образом, QUnit распознает два объекта как разные (см. первый тест), но не распознает разницу, как только я использую массив.
Так что я играл мало, и как только у меня есть перечислимую собственность на моем объекте, в котором оба экземпляра различаются, QUnit распознает его: Changed Fiddle
function Obj(val){ this._val = val; }
Интересно достаточно, если перечислимы недвижимость установить на то же значение при использовании этого:
var o1 = new Obj(1),
o2 = new Obj(1);
я вижу такое же поведение, как ни с имуществом (Fiddle).
Таким образом, с приведенными выше примерами в виду,
Как заставить QUnit для сравнения двух объектов по идентичности, чтобы проверить содержимое массива?
согласно обсуждению с @Ilya здесь перефразировать фактический вопрос:
Как я могу использовать deepEqual()
только для одного уровня - значений, все элементы данного массива должен быть сравнены идентичностью объекта?
PS: Я знаю, что наивным решением было бы сравнить элемент по элементу в массиве, но я думаю, что должен быть более быстрый способ.
Я хочу проверить, что '[o1]' не равно '[o2]', но 't1 = [o1]' и 't2 = [o1]'. – Sirko
'assert.equal ([o1], [o1], '')' не работает по той же причине, что и 'assert.equal (o1, o2, '') 'fail: те же свойства, но разные объекты. Кажется последовательным для меня. – Ilya
ОК, справедливая точка, удалил это предложение из вопроса, но общая проблема остается прежней. Внутри массива я хочу просто сравнить идентификаторы объектов, назовите его «глубоким», одноуровневым »вариантом. – Sirko