我正在用chai和sinon编写一些测试。
我有这个对象:
{
payload: {
foo: 'bar',
bar: []
},
type: 'FOO:BAR'
}
我想写一个期望,该对象包含一个称为bar的属性,它是一个空对象。
我有foo
的这个东西:
expect(myObject).to.have.property('foo', 'bar')
哪一个很好而简洁。将它与这个相当长的期望进行比较:
expect(myObject).to.have.property('bar').that.is.an('array').with.property('length', 0)
之所以这样写,是因为如果我使用property('bar', [])
时属性会通过引用进行比较,并且基于此cheatcheet中的示例(请参见属性部分)。
写这种期望的方式是否较为冗长?
答案 0 :(得分:0)
由于您已经在使用sinon
,因此可以使用sinon.assert.match
进行测试:
该值...不是
null
或undefined
,并且至少具有与expectation
相同的属性
这会检查obj
至少包含 payload
,其中期望值分别为foo
和bar
。
const sinon = require('sinon');
const obj = {
payload: {
foo: 'bar',
bar: []
},
type: 'FOO:BAR'
};
it('should match', () => {
sinon.assert.match(obj, {
payload: {
foo: 'bar',
bar: []
}
}); // Success!
});
另一种选择(看起来是@Xufox首先在评论中建议的)是chai
中的.eql
,
断言目标与给定的
obj
完全相等
这将检查obj.payload
与{ foo: 'bar', bar: [] }
的深度是否相等:
const expect = require('chai').expect;
const obj = {
payload: {
foo: 'bar',
bar: []
},
type: 'FOO:BAR'
};
it('should match', () => {
expect(obj.payload).to.eql({
foo: 'bar',
bar: []
}); // Success!
});