使用 Chai 的 Expect 接口测试部分对象属性



我有一个对象,它有许多属性,我想检查其中的一些。但是其中一个字段是一个随机字符串,因此无法检查是否完全匹配。

const expectedObject = {
a: 'A',
b: 123,
c: ['x', 'y', 'z'],
random: 'dsfgshdfsg'
}

检查eql不工作,由于随机场。

expect(result).to.eql(expectedObject)

是否有一个类似的方法,我可以提供一个对象,只有我想测试的字段?

另一种方法是删除测试的随机字段,但这有点麻烦。

const resultWithKnownFields = {...result}
delete resultWithKnownFields.random
const expectedObject = {
a: 'A',
b: 123,
c: ['x', 'y', 'z']
}
expect(resultWithKnownFields).to.eql(expectedObject)
expect(result.random.length).to.equal(10)

chai-子集插件的.containSubset()方法。可以对对象中的字段执行部分匹配。

const { expect } = require('chai');
const chai = require('chai');
const chaiSubset = require('chai-subset');
chai.use(chaiSubset);
describe('69555042', () => {
it('should pass', () => {
const expectedObject = {
a: 'A',
b: 123,
c: ['x', 'y', 'z'],
};
const result = {
a: 'A',
b: 123,
c: ['x', 'y', 'z'],
random: 'dsfgshdfsg',
};
expect(result).to.containSubset(expectedObject);
expect(typeof result.random).to.equal('string');
});
});

不需要插件也可以使用的另一个选项是使用扩展语法使用原始对象生成新对象。这样,任何你不关心的值开始都是相等的,并且在比较中被有效地忽略。

expect(result).to.eql({
...result,
a: 'A',
b: 123,
c: ['x', 'y', 'z']
// 'random' would have the same value as result
});

如果你想测试嵌套的成员,这会变得有点麻烦,因为你必须展开每个嵌套的成员。

expect(result).to.eql({
a: 'A',
nestedObject: {
...result.nestedObject,
nestedProperty: 'whatever'
}
});

相关内容

  • 没有找到相关文章

最新更新