是否有一个茉莉花匹配器比较对象的属性的子集

我有一个对象,可能会延长我的行为在testing,但我想确保原来的属性仍然存在。

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) 

我知道我可以写一个自定义的匹配器,但在我看来,这是一个常见的问题,应该已经有一个解决scheme了。 我应该在哪里找它?

茉莉花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'); 

我不认为这是共同的,我不认为你可以find一个。 只写一个:

 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; } }); });