У меня есть объект, который может быть расширен в соответствии с моим тестируемым поведением, но я хочу убедиться, что исходные свойства все еще существуют.
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)
Я знаю, что могу написать собственный сопоставитель, но мне кажется, что это настолько распространенная проблема, что решение уже должно быть найдено. Где мне это искать?
javascript
unit-testing
jasmine
Айвейн
источник
источник
Ответы:
Жасмин 2.0
Поскольку это исправление: 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}) })); });
источник
Object.keys(obj)
вместо ваших объектов напрямую?У меня была такая же проблема. Я только что попробовал этот код, у меня он работает:
expect(Object.keys(myObject)).toContain('myKey');
источник
Я не думаю, что это настолько распространено, и я не думаю, что вы сможете найти его. Просто напишите один:
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; } }); });
источник
Я подумал, что предложу альтернативу с использованием современной карты javascript и оператора rest. Мы можем опускать свойства, используя деструктурирование с оператором rest. См. Дальнейшее описание в этой статье .
var example = {'foo':'bar', 'bar':'baz'} var { extension, ...rest } = extendingPipeline(example) expect(rest).toEqual(example)
источник