chai-deep-equal-ignore-undefined

npm npm code style: prettier CI Status

このプラグインにより、deepEqualIgnoreUndefinedメソッドとChaiのexpectまたはassert APIを使用して、ディープイコール比較を実行するときに、未定義の値を持つプロパティを無視できます。

アサーション対象のオブジェクト内に未定義の値を持つプロパティがあり、それらを比較から除外したい場合に役立ちます。このプラグインは、オブジェクトとオブジェクトの配列の両方で動作し、循環参照を含むオブジェクトも含まれます。このプラグインを使用すると、比較中に定義されたプロパティのみが考慮されることを確認できます。

なぜでしょうか?

場合によっては、ディープイコール比較を実行するときに、未定義の値を持つプロパティがアサーション対象のオブジェクト内に表示されることがあります。このプラグインを使用すると、比較中にそれらのプロパティを無視できます。

オブジェクトとオブジェクトの配列の両方で動作し、循環参照を含むオブジェクトも含まれます。このプラグインを使用すると、比較中に定義されたプロパティのみが考慮されることを確認できます。

assertとexpectの両方のAPIがサポートされているため、テストフレームワークに簡単に統合できます。

質問や問題が発生した場合は、こちらに問題を作成してください。

このプラグインのライセンスはMITライセンスに基づいています。

インストール

npm install chai-deep-equal-ignore-undefined --save-dev
yarn add chai-deep-equal-ignore-undefined --dev

使用法

必須

const chai = require("chai");
const chaiDeepEqualIgnoreUndefined = require("chai-deep-equal-ignore-undefined");

chai.use(chaiDeepEqualIgnoreUndefined);

ES6インポート

import chai from "chai";
import chaiDeepEqualIgnoreUndefined from "chai-deep-equal-ignore-undefined";

chai.use(chaiDeepEqualIgnoreUndefined);

TypeScript

import * as chai from "chai";
import chaiDeepEqualIgnoreUndefined from "chai-deep-equal-ignore-undefined";

chai.use(chaiIgnoreUndefinedProperties);

// The typings for chai-deep-equal-ignore-undefined are included with the package itself.

これらの例はすべてJavaScript用です。

アサーションの例

  1. オブジェクトから最上位のプロパティを無視します
// Expect API
expect({ aa: undefined, bb: "b" }).to.deepEqualIgnoreUndefined({
  bb: "b",
  cc: undefined,
});
// Assert API
assert.deepEqualIgnoreUndefined(
  { a: undefined, b: "b" },
  { b: "b", c: undefined }
);
  1. 未定義の値を持つ配列内のプロパティを無視します
const expectedArray = [{ aa: undefined, bb: "b" }];
const actualArray = [{ cc: undefined, bb: "b" }];
// Expect API
expect(actualArray).to.deepEqualIgnoreUndefined(expectedArray);
// Assert API
assert.deepEqualIgnoreUndefined(expectedArray, actualArray);
  1. 未定義の値を持つネストしたプロパティを無視します
// Expect API
expect({
  topLevelProp: { aa: undefined, bb: "b" },
}).to.deepEqualIgnoreUndefined({
  topLevelProp: { bb: "b", cc: undefined },
});
// Assert API
assert.deepEqualIgnoreUndefined(
  { a: { b: undefined, c: "c" } },
  { a: { c: "c", d: undefined } }
);
  1. 循環依存関係で動作します
const actualObject = { aa: undefined, bb: "b" };
actualObject.c = actualObject;

const expectedObject = { bb: "b", cc: undefined };
expectedObject.c = expectedObject;

// Expect API
expect(actualObject).to.deepEqualIgnoreUndefined(expectedObject);
// Assert API
assert.deepEqualIgnoreUndefined(actualObject, expectedObject);

ディープクローン関数の例

import chai from "chai";
import {
  deepClone,
  deepCloneIgnoreUndefined,
} from "chai-deep-equal-ignore-undefined";

const object = { a: { b: undefined, c: "c" }, d: undefined };
object.f = object;
const cloneWithoutUndefined = deepCloneIgnoreUndefined(object);
const clone = deepClone(object);

// Using regular `to.deep.equal` here to perform assertion.
expect(cloneWithoutUndefined).to.deep.equal({ a: { c: "c" }, f: "[Circular]" });
expect(clone).to.deep.equal({
  a: { b: undefined, c: "c" },
  d: undefined,
  f: "[Circular]",
});

貢献

貢献は大歓迎です。質問がある場合は、こちらに問題を作成してください。

ライセンス

MIT