Подтвердить что ты не робот

Chai.js: Объект содержит/включает

Chai имеет метод include. Я хочу проверить, содержит ли объект другой объект. Например:

var origin = {
  name: "John",
  otherObj: {
    title: "Example"
  }
}

Я хочу использовать Chai для проверки, содержит ли этот объект следующее (что он делает)

var match = {
  otherObj: {
    title: "Example"
  }
}

Выполнение этого не работает:

origin.should.include(match)
4b9b3361

Ответ 1

Вложения и содержащие утверждения могут использоваться как либо свойства, основанные на языковых цепочках или, как методы для утверждения включения объекта в массив или подстрока в строке . Когда они используются в качестве языковых цепочек, они переключают флажок сложения для утверждения ключей. [акцент мой]

Итак, если вы вызываете include на объекте (а не на массив или строку), тогда он служит только для переключения флага сложения для утверждения ключей. По мнению вашего примера, тестирование на глубокое равенство имеет смысл, возможно, сначала проверяет ключ.

origins.should.include.keys("otherObj");
origins.otherObj.should.deep.equal(match.otherObj);

На самом деле, теперь я просматриваю другие примеры, вы, вероятно, были бы счастливы с этим:

origins.should.have.deep.property("otherObj", match.otherObj)

Ответ 2

Хей, только что опубликованный chai-подмножество. Проверьте это: https://www.npmjs.org/package/chai-subset Это должно сработать для вас)

 var chai = require('chai');
 var chaiSubset = require('chai-subset');
 chai.use(chaiSubset);

 var obj = {
     a: 'b',
     c: 'd',
     e: {
         foo: 'bar',
         baz: {
             qux: 'quux'
         }
     }
 };

 expect(obj).to.containSubset({
     e: {
         foo: 'bar',
         baz: {
             qux: 'quux'
         }
     }
 });

Ответ 3

В Chai 4.2.0, например, вы можете использовать глубокое включение

Примеры Chaijs Doc:

// Target array deeply (but not strictly) includes '{a: 1}'
expect([{a: 1}]).to.deep.include({a: 1});
expect([{a: 1}]).to.not.include({a: 1});

// Target object deeply (but not strictly) includes 'x: {a: 1}'
expect({x: {a: 1}}).to.deep.include({x: {a: 1}});
expect({x: {a: 1}}).to.not.include({x: {a: 1}});