🐷
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