web-dev-qa-db-ja.com

Chai.js:オブジェクトに含まれる/含まれる

Chai にはincludeメソッドがあります。オブジェクトに別のオブジェクトが含まれているかどうかをテストしたいと思います。例えば:

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

Chaiを使用して、このオブジェクトに次のものが含まれているかどうかをテストしたい(これは含まれています)

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

これを行うと機能しないようです。

Origin.should.include(match)
13
user1082754

Includeおよびcontainアサーションは、どちらかプロパティベースの言語チェーンまたはとして使用できます配列または文字列の部分文字列。言語チェーンとして使用される場合、キーアサーションの包含フラグを切り替えます。 [私の強調]

したがって、オブジェクト(配列や文字列ではない)でincludeを呼び出す場合は、キーアサーションのcontainフラグを切り替えるだけです。あなたの例の見た目では、深い同等性をテストする方が理にかなっており、おそらく最初にキーをチェックします。

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

実際、今私は他の例を閲覧します、あなたはおそらくこれで最も幸せになるでしょう:

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

ヘイ、チャイサブセットを公開したばかりです。これをチェックしてください: 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'
         }
     }
 });
24
eagleeye

たとえば、chai 4.2.0では、deepincludeを使用できます。

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}});
1
jc1