Сопоставьте частичные объекты в утверждениях Чая?
Я ищу лучший способ соответствовать следующему:
expect([
{
C1: 'xxx',
C0: 'this causes it not to match.'
}
]).to.deep.include.members([
{
C1: 'xxx'
}
]);
Выше не работает, потому что C0 существует в фактическом, но не ожидаемый. Короче говоря, я хочу, чтобы это ожидалось, чтобы пройти, но я не уверен, как это сделать, не написав кучу собственного кода...
Ответы
Ответ 1
chai-subset или chai-fuzzy также могут выполнить то, что вы ищете.
Chai-subset должен работать так:
expect([
{
C1: 'xxx',
C0: 'this causes it not to match.'
}
]).to.containSubset([{C1: 'xxx'}]);
Лично, если я не хочу включать другой плагин, я буду использовать property
или keys
соответствия, которые включает в себя Chai:
([
{
C1: 'xxx',
C0: 'this causes it not to match.'
}
]).forEach(obj => {
expect(obj).to.have.key('C1'); // or...
expect(obj).to.have.property('C1', 'xxx');
});
Ответ 2
Есть несколько разных плагинов, которые решают эту проблему. Я фанат мелкого-глубокого-равного. Вы бы использовали это так:
expect([
{
C1: 'xxx',
C0: 'this causes it not to match.'
}
]).to.shallowDeepEqual([
{
C1: 'xxx'
}
]);
Ответ 3
без плагинов:
http://chaijs.com/api/bdd/#method_property
expect([
{
C1: 'xxx',
C0: 'this causes it not to match.'
}
]).to.have.deep.property('[0].C1', 'xxx');
Ответ 4
Я считаю, что самым простым (и, конечно же, самым простым) способом было бы:
var actual=[
{
C1:'xxx',
C0:'yyy'
}
];
actual.forEach(function(obj){
expect(obj).to.have.property('C1','xxx');
});
Ответ 5
Я написал chai-match-pattern и lodash-match-pattern для обработки сценариев с неполным соответствием (и многих других).
var chai = require('chai');
var chaiMatchPattern = require('chai-match-pattern');
chai.use(chaiMatchPattern);
// Using JDON pattern in expectation
chai.expect([
{
C1: 'xxx',
C0: 'this causes it not to match.'
}
]).to.matchPattern([
{
C1: 'xxx',
'...': ''
}
]);
// Using the slightly cleaner string pattern notation in expectation
chai.expect([
{
C1: 'xxx',
C0: 'this causes it not to match.'
}
]).to.matchPattern(`
[
{
C1: 'xxx',
...
}
]
`
);
Ответ 6
Немного обновленная версия #RobRaisch, потому что для пустого сравнения выдается ошибка, потому что '' не равно ''
let expected = {
dateOfBirth: '',
admissionDate: '',
dischargeDate: '',
incidentLocation: null
};
Object.keys(expected).forEach(function(key) {
expect(actual[key]).to.equal(expected[key]);
});
Ответ 7
Вы можете использовать функции pick
и omit
подчеркивания, чтобы выбрать/отклонить свойства для проверки:
const { pick, omit } = require('underscore');
const obj = {
C1: 'xxx',
C0: 'this causes it not to match.',
};
it('tests sparse object with pick', () => {
expect(pick(obj, 'C1')).to.eql({ C1: 'xxx' });
});
it('tests sparse object with omit', () => {
expect(omit(obj, 'C0')).to.eql({ C1: 'xxx' });
});