Socket
Book a DemoInstallSign in
Socket

deep-assert

Package Overview
Dependencies
Maintainers
1
Versions
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

deep-assert

Better deep-equals object expectations, supporting dynamic bottom-up assertions using any() and satisfies().

latest
Source
npmnpm
Version
0.3.0
Version published
Maintainers
1
Created
Source

deep-assert

Build Status npm

The most developer-friendly way to write assertions for large or complicated objects and arrays.

  • Use any() and satisfies() property matchers
  • Short, but precise diffs, even for large nested objects
  • Works with objects, arrays, dates, buffers, and more
  • Write custom property assertions
  • Zero dependencies

Terminal

Installation

npm install deep-assert

Usage

Basic

Let's say we want to check if an array of user objects matches our expectation, but we don't know what the id is gonna be, since it's a random ID. It's easy, using any().

import * as assert from "assert-deep"

assert.deepEquals(
  // Actual value:
  {
    id: Math.random(),
    name: "John Smith",
    meta: {
      isActive: true,
      lastLogin: new Date("2019-04-29T12:31:00")
    }
  },
  // Expectation:
  {
    id: assert.any(),
    name: "John Smith",
    meta: {
      isActive: true,
      lastLogin: new Date("2019-04-29T12:31:00")
    }
  }
])

Custom assertions

Let's try the previous use case again, but this time we check that the id is a valid UUIDv4. We use the satisfies() helper function to create a custom assertion to be used within the object expectation.

import * as assert from "assert-deep"

const assertPositiveNumber = () => assert.satisfies(value => typeof value === "number" && value > 0)

assert.deepEquals(
  // Actual value:
  {
    id: Math.random(),
    name: "John Smith",
    meta: {
      isActive: true,
      lastLogin: new Date("2019-04-29T12:31:00")
    }
  },
  // Expectation:
  {
    id: assertPositiveNumber(),
    name: "John Smith",
    meta: {
      isActive: true,
      lastLogin: new Date("2019-04-29T12:31:00")
    }
  }
])

Spreading any()

Normally deepEquals() will fail if there are properties on the tested object that don't exist on the expectation. We can use any() with the object spread operator to allow additional properties to be present.

deepEquals() will then only check the expected properties and ignore all other ones.

import * as assert from "assert-deep"

assert.deepEquals(
  // Actual value:
  {
    id: Math.random(),
    name: "John Smith",
    meta: {
      isActive: true,
      lastLogin: new Date("2019-04-29T12:31:00")
    }
  },
  // Expectation:
  {
    id: assert.any(),
    name: "John Smith",
    ...assert.any()
  }
])

Recursive objects

You can call deepEquals() in a custom satisfies() as well. This way you can easily test recursive data structures, for instance.

import * as assert from "assert-deep"

const actual = { foo: {} }
actual.foo.parent = actual.foo

assert.deepEquals(actual, {
  foo: assert.satisfies(foo => assert.deepEquals(foo, { parent: foo }))
})

License

MIT

Keywords

assert

FAQs

Package last updated on 12 Jan 2022

Did you know?

Socket

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.

Install

Related posts