
Security News
Socket Integrates With Bun 1.3’s Security Scanner API
Socket now integrates with Bun 1.3’s Security Scanner API to block risky packages at install time and enforce your organization’s policies in local dev and CI.
chai-exclude
Advanced tools
Exclude keys to compare from a deep equal operation with chai expect and assert
Exclude keys to compare from a deep equal operation with chai expect or assert.
Sometimes you'll need to exclude object properties that generate unique values while doing an assertion. This plugin makes it easier to remove those properties from comparison.
Works with both objects and array of objects with or without circular references.
chai-exclude
is an ESM package targeting Chai v5 and above.
npm install chai-exclude --save-dev
If you are using Chai v4, you can use the CommonJS version of the package.
npm install chai-exclude@2.1.1 --save-dev
import { use } from 'chai'
import chaiExclude from 'chai-exclude'
// If you are using TypeScript, the typings for chai-exclude are included in the package
use(chaiExclude)
All these examples are for JavaScript. If you are using TypeScript and assert
, you'll need to deal with strict types. Take a look at the type definition.
// Object
assert.deepEqualExcluding({ a: 'a', b: 'b' }, { b: 'b' }, 'a')
assert.deepEqualExcluding({ a: 'a', b: 'b' }, { a: 'z', b: 'b' }, 'a')
expect({ a: 'a', b: 'b' }).excluding('a').to.deep.equal({ b: 'b' })
expect({ a: 'a', b: 'b' }).excluding('a').to.deep.equal({ a: 'z', b: 'b' })
// Array
assert.deepEqualExcluding([{ a: 'a', b: 'b' }], [{ b: 'b' }], 'a')
assert.deepEqualExcluding([{ a: 'a', b: 'b' }], [{ a: 'z', b: 'b' }], 'a')
expect([{ a: 'a', b: 'b' }]).excluding('a').to.deep.equal([{ b: 'b' }])
expect([{ a: 'a', b: 'b' }]).excluding('a').to.deep.equal([{ a: 'z', b: 'b' }])
const obj = {
a: 'a',
b: 'b',
c: {
d: 'd',
e: 'e'
}
}
// Object
assert.deepEqualExcluding(obj, { b: 'b' }, ['a', 'c'])
assert.deepEqualExcluding(obj, { a: 'z', b: 'b' }, ['a', 'c'])
expect(obj).excluding(['a', 'c']).to.deep.equal({ b: 'b' })
expect(obj).excluding(['a', 'c']).to.deep.equal({ a: 'z', b: 'b' })
const array = [
{
a: 'a',
b: 'b',
c: {
d: 'd',
e: 'e'
}
}
]
// Array
assert.deepEqualExcluding(array, [{ b: 'b' }], ['a', 'c'])
assert.deepEqualExcluding(array, [{ a: 'z', b: 'b' }], ['a', 'c'])
expect(array).excluding(['a', 'c']).to.deep.equal([{ b: 'b' }])
expect(array).excluding(['a', 'c']).to.deep.equal([{ a: 'z', b: 'b' }])
const actualObj = {
a: 'a',
b: 'b',
c: {
a: 'a',
b: {
a: 'a',
d: {
a: 'a',
b: 'b',
d: null
}
}
},
d: ['a', 'c']
}
const actualArray = [actualObj]
const expectedObj = {
a: 'z', // a is excluded from comparison
b: 'b',
c: {
b: {
d: {
b: 'b',
d: null
}
}
},
d: ['a', 'c']
}
const expectedArray = [expectedObj]
// Object
assert.deepEqualExcludingEvery(actualObj, expectedObj, 'a')
expect(actualObj).excludingEvery('a').to.deep.equal(expectedObj)
// Array
assert.deepEqualExcludingEvery(actualArray, expectedArray, 'a')
expect(actualArray).excludingEvery('a').to.deep.equal(expectedArray)
const actualObj = {
a: 'a',
b: 'b',
c: {
a: 'a',
b: {
a: 'a',
d: {
a: 'a',
b: 'b',
d: null
}
}
},
d: ['a', 'c']
}
const actualArray = [actualObj]
const expectedObj = {
b: 'b',
c: {
b: {
}
}
}
const expectedArray = [expectedObj]
// Object
assert.deepEqualExcludingEvery(actualObj, expectedObj, ['a', 'd'])
expect(actualObj).excludingEvery(['a', 'd']).to.deep.equal(expectedObj)
// Array
assert.deepEqualExcludingEvery(actualArray, expectedArray, ['a', 'd'])
expect(actualArray).excludingEvery(['a', 'd']).to.deep.equal(expectedArray)
Contributions are welcome. If you have any questions create an issue here.
The deep-equal package provides deep equality comparison for Node.js and browsers. It does not offer the ability to exclude specific keys from the comparison, making chai-exclude more flexible for tests where certain properties should be ignored.
Lodash's isEqual function performs a deep comparison between two values to determine if they are equivalent. While powerful, it does not natively support excluding specific keys from the comparison, which is a feature provided by chai-exclude.
FAQs
Exclude keys to compare from a deep equal operation with chai expect and assert
The npm package chai-exclude receives a total of 214,683 weekly downloads. As such, chai-exclude popularity was classified as popular.
We found that chai-exclude demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Socket now integrates with Bun 1.3’s Security Scanner API to block risky packages at install time and enforce your organization’s policies in local dev and CI.
Security News
Python 3.14 adds template strings, deferred annotations, and subinterpreters, plus free-threaded mode, an experimental JIT, and Sigstore verification.
Security News
Former RubyGems maintainers have launched The Gem Cooperative, a new community-run project aimed at rebuilding open governance in the Ruby ecosystem.