23

チャイにはinclude方法があります。オブジェクトに別のオブジェクトが含まれているかどうかをテストしたい。例えば:

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

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

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

これを行うとうまくいかないようです:

origin.should.include(match)
4

5 に答える 5

33

ヘイ、chai-subset を公開しました。これをチェックしてください: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'
         }
     }
 });
于 2014-07-15T11:59:47.243 に答える
17

include および contain アサーションは、プロパティ ベースの言語チェーンとして、または配列内のオブジェクトまたは文字列内の部分文字列の包含をアサートするメソッドとして使用できます。言語チェーンとして使用される場合、キー アサーションの包含フラグを切り替えます。[鉱山を強調]

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

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

実際、他の例を参照してみると、おそらくこれが一番満足するでしょう:

origins.should.have.deep.property("otherObj", match.otherObj)
于 2013-02-28T20:42:54.887 に答える