Есть ли созревающий жасмин для сравнения объектов на подмножествах их свойств
У меня есть объект, который может быть расширен по моему тестируемому поведению, но я хочу убедиться, что исходные свойства все еще существуют.
var example = {'foo':'bar', 'bar':'baz'}
var result = extendingPipeline(example)
// {'foo':'bar', 'bar':'baz', 'extension': Function}
expect(result).toEqual(example) //fails miserably
Я хотел бы иметь совпадение, которое пройдет в этом случае по строкам:
expect(result).toInclude(example)
Я знаю, что могу написать пользовательский макет, но мне кажется, что это такая распространенная проблема, что решение уже должно быть там. Где я должен искать его?
Ответы
Ответ 1
Жасмин 2.0
expect(result).toEqual(jasmine.objectContaining(example))
Так как это исправление: https://github.com/pivotal/jasmine/commit/47884032ad255e8e15144dcd3545c3267795dee0
он даже работает на вложенных объектах, вам просто нужно обернуть каждый объект, который вы хотите частично совместить в jasmine.objectContaining()
Простой пример:
it('can match nested partial objects', function ()
{
var joc = jasmine.objectContaining;
expect({
a: {x: 1, y: 2},
b: 'hi'
}).toEqual(joc({
a: joc({ x: 1})
}));
});
Ответ 2
У меня была такая же проблема. Я просто пробовал этот код, он работает для меня:
expect(Object.keys(myObject)).toContain('myKey');
Ответ 3
Я не думаю, что это так распространено, и я не думаю, что вы можете его найти. Просто напишите:
beforeEach(function () {
this.addMatchers({
toInclude: function (expected) {
var failed;
for (var i in expected) {
if (expected.hasOwnProperty(i) && !this.actual.hasOwnProperty(i)) {
failed = [i, expected[i]];
break;
}
}
if (undefined !== failed) {
this.message = function() {
return 'Failed asserting that array includes element "'
+ failed[0] + ' => ' + failed[1] + '"';
};
return false;
}
return true;
}
});
});