Утверждение Chai для проверки определенных полей в массиве объектов

У меня есть массив объектов, как показано ниже, и я хотел бы утверждать только определенные поля в массиве.

Массив объектов -

var a = [{"key":"key2","value":"value2","updatedBy":"name1","Dttm":1516849776062},{"key":"key1","value":"value1","updatedBy":"name2","Dttm":1516849776060}]]

Мне просто нужно утверждать против полей ключа и значения и не беспокоиться об updateBy и Dttm, так что что-то вроде

expect(a)........([{"key":"key1","value":"value1"},{"key":"key2","value":"value2"}])

person Sai    schedule 25.01.2018    source источник
comment
Не уверен, что для этого варианта использования подойдут вещи chai — chaijs.com/plugins/chai- вещи   -  person Sai    schedule 25.01.2018


Ответы (1)


Вы можете использовать комбинацию из 2 плагинов chai: chai-things и chai-like.

Chai Things:

Chai Things добавляет в Chai поддержку утверждений для элементов массива.

Нравится Chai:

Сопоставитель JSON для chai. Это действительно полезно, когда вы тестируете API и хотите игнорировать некоторые атрибуты, такие как: updatedAt, createdAt, id.

С обоими вы можете написать такой тест, например:

//...
expect(a).to.contain.something.like({"key":"key1", "value":"value1"})
expect(a).to.contain.something.like({"key":"key2", "value":"value2"})

Вот как установить оба:

npm install --save-dev chai-things chai-like

после установки скажите chai использовать новые плагины:

const chai = require('chai')

chai.use(require('chai-like'))
chai.use(require('chai-things'))

Ссылки для дальнейшего чтения и примеров:

chai-things: http://chaijs.com/plugins/chai-things/

chai-like: http://chaijs.com/plugins/chai-like/

person Tal Z    schedule 25.01.2018
comment
я продолжаю получать ошибки утверждения при использовании вышеизложенного, я требую chai в спецификации теста, а затем использую chai.expect для всех других утверждений, с этой настройкой я не уверен, как именно я могу использовать вышеуказанные 2 для утверждения объекта массив без влияния на другие утверждения - person Sai; 25.01.2018
comment
какие ошибки вы получаете? Вы правильно добавили плагины chai? Это не должно влиять на другие утверждения... или, может быть, я не понимаю, что вы имеете в виду. - person Tal Z; 25.01.2018
comment
Итак, вот как я установил плагины и использовал их: я сделал npm install --save-dev, чтобы он был добавлен в мою зависимость dev, а затем в файле спецификации у меня есть что-то вроде const chai = require('chai'); chai.use(require('chai-things'));chai.use(require('chai-like')); если у меня есть chai.use в верхней части моего файла спецификации, тогда я получаю эту ошибку. -вещи/библиотека/чай-вещи.js:171:37) - person Sai; 25.01.2018
comment
это ошибка в утверждении, которое выглядит следующим образом: expect(res.body.msg).to.be.an('array').to.have.lengthOf(1); - person Sai; 25.01.2018
comment
Мм .. не уверен, связано ли это с исходным вопросом. Но попробуйте вместо этого: expect(res.body.msg).to.be.an('array').and.have.lengthOf(1) (и убедитесь, что res.body.msg действительно является массивом) - person Tal Z; 25.01.2018
comment
Итак, в спецификации теста, если у меня есть только утверждения expect(a).to.contain.something.like({key:key1, value:value1}) и expect(a).to.contain.something.like( {key:key2, value:value2}), он работает нормально, но если у меня есть другие утверждения, подобные тому, что я описал ранее, он выдает эту странную ошибку утверждения... WRT chai, как я упоминал выше, у меня есть только они, а также у меня есть const expect = chai.expect; не уверен, что утверждение должно что-то с этим делать... Любая идея? - person Sai; 25.01.2018
comment
Кроме того, res.body.msg действительно является массивом :), и странно, что даже это утверждение не выполняется с тем же исключением, expect(res.body.msg[0]).to.be.an('object') .that.has.all.keys('type', 'code', 'message', 'detail', 'source'); это работало нормально до добавления chai like и chai - person Sai; 25.01.2018
comment
Просто чтобы уточнить, это из-за новых плагинов? Кроме того, вы можете скопировать сюда утверждение, которое выдает ошибку? - person Tal Z; 25.01.2018
comment
Да, ошибка возникает только после добавления новых плагинов, ниже приведены некоторые утверждения, которые не работают. - person Sai; 25.01.2018
comment
ожидать(res.body.msg).to.be.an('массив').and.have.lengthOf(1); ожидать(res.body.msg[0]).to.be.an('объект').that.has.all.keys('тип', 'код', 'сообщение', 'подробности', 'источник' ); - person Sai; 25.01.2018
comment
Я вижу, что chai-things действительно имеет открытую ошибку для того, что вы описываете. Извините:\ github.com/chaijs/chai-things/issues/24 - person Tal Z; 25.01.2018
comment
Ах, я вижу, не беспокойтесь, позвольте мне взглянуть на это, если есть какой-то обходной путь, который я могу использовать, чтобы оба они работали, тогда это было бы здорово! - person Sai; 25.01.2018
comment
Таким образом, обходной путь для преодоления исключения утверждения будет состоять в том, если мы заменим .all.keys на .should.include.keys, поэтому это утверждение expect(res.body.msg[0]).to.be.an('object' ).that.has.all.keys‌​('тип', 'код', 'сообщение', 'подробности', 'источник'); будет выглядеть как expect(res.body.msg[0]).to.be.an('object') и res.body.msg[0].should.include.keys('type', 'code', ' сообщение», «подробности», «источник») - person Sai; 25.01.2018
comment
но я не уверен, как иметь must.include, который проверял бы все ключи в объекте. - person Sai; 25.01.2018
comment
Давайте продолжим обсуждение в чате. - person Tal Z; 25.01.2018
comment
Прокси не дает мне доступ к чату, я сегодня не взял свой персональный ноутбук на работу :(, - person Sai; 25.01.2018