Coder Social home page Coder Social logo

kberg / chai-deep-equal-ignore-undefined Goto Github PK

View Code? Open in Web Editor NEW

This project forked from danielkurtjak/chai-deep-equal-ignore-undefined

0.0 0.0 0.0 67 KB

Chai plugin to perform deep equal comparison while ignoring properties with undefined value.

License: MIT License

JavaScript 96.48% TypeScript 3.52%

chai-deep-equal-ignore-undefined's Introduction

chai-deep-equal-ignore-undefined

npm npm code style: prettier CI Status

This plugin allows you to ignore properties with undefined values when performing deep equal comparisons, using deepEqualIgnoreUndefined method and chai's expect or assert API.

It is useful when you have properties within asserting objects that have undefined values and you want to exclude them from the comparison. This plugin works with both objects and arrays of objects, including those with circular references. By using this plugin, you can ensure that only the defined properties are considered during the comparison.

Why?

Sometimes, when performing deep equal comparisons, you may encounter properties within asserting objects that have undefined values. This plugin allows you to ignore those properties during the comparison.

It works with both objects and arrays of objects, including those with circular references. By using this plugin, you can ensure that only the defined properties are considered during the comparison.

Both the assert and expect API are supported, making it easy to integrate into your testing framework.

If you have any questions or encounter any issues, please create an issue here.

This plugin is licensed under the MIT License.

Installation

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

Usage

Require

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

chai.use(chaiDeepEqualIgnoreUndefined);

ES6 Import

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.

Examples

All these examples are for JavaScript.

Assertion examplees

  1. Ignore a top level property from an object
// 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. Ignore properties within an array with undefined values
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. Ignore nested properties with undefined values
// 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. Works with circular dependencies
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);

Deep clone function example

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]",
});

Contributing

Contributions are welcome. If you have any questions create an issue here.

License

MIT

chai-deep-equal-ignore-undefined's People

Contributors

danielkurtjak avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.