🐷
chaiのeqとeqlとeqlsとequalとequalsの違い
わかりにくすぎる
chaiのアサーションには、以下の5つがあります。
eq
eql
eqls
equal
equals
わかりにくすぎるので整理します。
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