[javascript] 속성의 하위 집합에서 개체를 비교하는 재스민 매 처가 있습니까?
테스트중인 내 동작에 따라 확장 될 수있는 개체가 있지만 원래 속성이 그대로 있는지 확인하고 싶습니다.
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)
사용자 지정 매처를 작성할 수 있다는 것을 알고 있지만 이것이 해결 방법이 이미 존재해야하는 일반적인 문제인 것 같습니다. 어디에서 찾아야합니까?
답변
재스민 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})
}));
});
답변
나는 같은 문제가 있었다. 나는 방금이 코드를 시도했지만 나를 위해 작동합니다.
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;
}
});
});