npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

hein

v1.5.0

Published

Assertion library written in TypeScript

Downloads

718

Readme

Hein

npm npm npm GitHub Workflow Status (with event)

Assertion library with focus on TypeScript

Features

Plugins

npm/hein-plugin-sinon - Provides assertions like to.have.been.calledOnce() and to.have.been.calledWith() for sinon spies.

Usage

Assert

import { assert } from 'hein';
import { equal } from 'hein/assert';

equal(1, 1);
assert.equal(1, 1);

Expect

import { expect } from 'hein';
expect(1).to.equal(1);

Chainable properties

Language chains

There are multiple side-effect free tokens to chain assertions together. These include:

  • to
  • be
  • a
  • an
  • have
  • in
  • of
expect(5).to.be.a.number(); // same as expect(5).number();
not

Not inverts the conditions inside the expectation.

expect(5).to.not.equal(4);
every

Run the assertion for each member of an array

expect([1, 2, 3]).every.to.be.a.number();
length

Run the assertion on the length of an array

expect([1, 2, 3]).length.to.be.greaterThan(2);
and

Clears most of the state in the chain (with the exception of the effects of .every);

expect(1).to.not.be.greaterThan(5).and.be.greaterThan(0);

Assertions

above

Alias for greaterThan

array

Assert that value is an array

expect([]).to.be.an.array();
atLeast

Alias for greaterThanOrEqual

atMost

Alias for lessThanOrEqual

ballpark

Assert that value is within a range of expectation (default is 0.1 - within 10%)

expect(1.1).to.be.in.ballpark(1);
expect(120).to.be.in.ballpark(100, 0.2);
below

Alias for lessThan

bigint

Assert that value is a BigInt

expect(BigInt(5)).to.be.a.bigint();
boolean

Assert that value is a boolean

expect(true).to.be.a.boolean();
contain

Alias for include

Date

Assert that value is an instance of Date

expect(new Date()).to.be.a.date();
empty

Assert that array / object / Map / Set is empty

expect([]).to.be.empty();
expect({}).to.be.empty();
expect(new Map()).to.be.empty();
expect(new Set()).to.be.empty();
endWith

Assert that string ends with argument

expect('hein').to.endWith('in');
eql

Assert that value deep equals the expectation. When combined with .partially expected may have missing properties

expect({ a: 1 }).to.eql({ a: 1 });
expect({ a: 1, b: new Date() }).to.partially.eql({ a: 1 });

import { any, createEvaluation } from 'hein';
expect({ a: 1, b: new Date(), c: Math.random() }).to.eql({
    a: 1,
    b: any,
    c: createEvaluation((n) => typeof n === 'number')
});
eq

Alias for equal

equal

Assert that value strictly equals expectation. NaN is treated as a non-unique value. Chaining with .deep is an alias for [#eql]

expect('hein').to.equal('hein');
expect(NaN).to.equal(NaN);
expect({ a: 1 }).to.deep.equal({ a: 1 });
false

Assert that value is false

expect(false).to.be.false();
function

Assert that value is a function

expect(() => {}).to.be.a.function();
greaterThan

Assert that value is greater than expectation

expect(5).to.be.greaterThan(4);
gt

Alias for greaterThan

greaterThanOrEqual

Assert that value is greater than or equal to argument

expect(5).to.be.greaterThanOrEqual(5);
expect(5).to.be.greaterThanOrEqual(4);
gte

Alias for greaterThanOrEqual

include

Assert that element / substring is present in array / string

expect([1, 2, 3]).to.include(2);
expect('hein').to.include('ei');
instanceOf

Assert that value is an instance of provided constructor

expect(new Error()).to.be.an.instanceOf(Error);

keys

Assert that object has keys

expect({ a: 1, b: 2 }).to.have.keys(['a', 'b']);
expect({ a: 1, b: 2 }).to.have.keys('a');
lengthOf

Assert that value has a length equal to argument

expect([1]).to.have.a.lengthOf(1);
expect({ a: 1 }).to.have.a.lengthOf(1);
expect(new Map([['a', 1]])).to.have.a.lengthOf(1);
expect(new Set([1])).to.have.a.lengthOf(1);
expect('hein').to.have.a.lengthOf(4);
isAfter

Assert that date is before argument

expect(new Date(2020, 1, 2)).to.be.after(new Date(2020, 1, 1));
isBefore

Assert that date is before argument

expect(new Date(2020, 1, 1)).to.be.before(new Date(2020, 1, 2));
isBetween

Assert that date or number is between arguments

expect(new Date(2020, 1, 2)).to.be.between(new Date(2020, 1, 1), new Date(2020, 1, 3));
expect(2).to.be.between(1, 3);
lessThan

Assert that value is less than expectation

expect(5).to.be.lessThan(6);
lt

Alias for lessThan

lessThanOrEqual

Assert that value is less than or equal to expectation

expect(5).to.be.lessThanOrEqual(5);
expect(4).to.be.lessThanOrEqual(5);
lte

Alias for lessThanOrEqual

Map

Assert that value is an instance of Map

expect(new Map()).to.be.a.Map();
members

Assert that array contains members of expectation

expect([1, 2, 3]).to.have.members([1, 2]);
// check that the arrays have same length
expect([1, 2, 3]).to.have.same.members([1, 2, 3]);
// check that the members are found in the same order
expect([1, 2, 3]).to.have.ordered.members([1, 2, 3]);
// check for deep equality of members
expect([{ a: 1 }, { b: 2 }]).to.have.deep.members([{ a: 1 }]);
// check for members by partial equality
expect([{ a: 1 }, { b: 2 }]).to.have.partially.members([{ a: 1 }]);
NaN

Assert that value is NaN

expect(NaN).to.be.NaN();
null

Assert that value is null

expect(null).to.be.null();
number

Assert that value is a number

expect(5).to.be.a.number();
object

Assert that value is an object. Null and instances of Array don't count

expect({}).to.be.an.object();
property

Assert that actual has property. Optionally check that propery has value

expect({ a: 1 }).to.have.property('a');
expect({ a: 1 }).to.have.property('a', 1);
reject

Assert that provided Promise rejects. At the moment this is the only assertion that can't be chained, returns a promise

await expect(Promise.reject()).to.reject();
roundTo

Assert that number can be rounded to target

expect(5.5).to.be.roundTo(6);
expect(5.14).to.roundTo(5.1, 1);
expect(110).to.roundTo(100, -2);
Set

Assert that value is an instance of Set

expect(new Set()).to.be.a.Set();
sizeOf

Alias of lengthOf

startWith

Assert that string starts with argument

expect('hein').to.startWith('he');
string

Assert that value is a string

expect('hein').to.be.a.string();
symbol

Assert that value is a symbol

expect(Symbol()).to.be.a.symbol();
throw

Assert that provided function throws

expect(() => {
    throw new Error();
}).to.throw();
true

Assert that value is true

expect(true).to.be.true;
undefined

Assert that value is undefined

expect(undefined).to.be.undefined();
WeakMap

Assert that value is an instance of WeakMap

expect(new WeakMap()).to.be.a.WeakMap();
WeakSet

Assert that value is an instance of WeakSet

expect(new WeakSet()).to.be.a.WeakSet();

Modifiers

excluding

Exclude properties from assertion

expect({ a: 1, b: 2 }).excluding('a').to.eql({ b: 2 });