🐊
chaiのeqとeqlとeqlsとequalとequalsの違い
いっぱいある
chaiのアサーションには、以下の5つがあります。
eqeqleqlsequalequals
初めて見たとき違いがわからなかったので備忘のため整理しておきます。
equalとeqlだけ覚えれば不便はしない
equalは値の比較に使います。===だと思っておけばいいです。
eqlはオブジェクトの比較に使います。厳密なロジックは以下のページにあります。
コードで挙動を確認
const primitiveA = 'foo';
const primitiveB = 'foo';
// 値の比較はequal
expect(primitiveA).to.equal(primitiveB);
const objectA = ['foo', 'bar'];
const objectB = ['foo', 'bar'];
// オブジェクトは構造が同じでも別の実体のため等しくない
expect(objectA).to.not.equal(objectB);
// eqlを使えばオブジェクトが同じ構造か判定できる
expect(objectA).to.eql(objectB);
equalとeqとequalsは同じ
値比較はeqとequalsがequalのエイリアスになっています。
eqlとeqlsは同じ
オブジェクト比較はeqlsがeqlのエイリアスになっています。
.deep.equalと.eqlの違い
.deepが付くと、同一チェーン内がぜんぶ.deep扱いになります。
// .deepが2つ目のeqにも効くのでOK
expect(objectA)
.to.deep.eq(objectB)
.eq(['foo', 'bar']);
// 単なるeqの扱いになるのでNG
expect(objectA)
.to.eql(objectB)
.eq(['foo', 'bar']);
Discussion