Provides operations for asserting that all conditions in a chain are met.
This operation allows you to assert that all specified conditions are true for the target value. It is useful for combining multiple assertions into a single chain, ensuring that all conditions must pass.
Provides operations for asserting that any condition in a chain is met.
This operation allows you to assert that at least one of the specified conditions is true for the target value. It is useful for combining multiple assertions into a single chain, ensuring that at least one condition must pass.
Asserts that executing the target function changes the monitored value. Can monitor either a getter function's return value or an object property.
import { expect } from "@nevware21/tripwire";
// With getter function
let value = 10;
const getValue = () => value;
const addTwo = () => { value += 2; };
expect(addTwo).to.change(getValue);
expect(addTwo).to.change(getValue).by(2);
// With object property
const obj = { val: 10 };
const increment = () => { obj.val++; };
expect(increment).to.change(obj, 'val');
expect(increment).to.change(obj, 'val').by(1);
Asserts that executing the target function changes the monitored value by a specific delta. This is a direct method that doesn't require chaining with .by(). Important: The sign of the delta is ignored - only the absolute value is compared.
let value = 10;
const getValue = () => value;
const addFive = () => { value += 5; };
const subtractFive = () => { value -= 5; };
expect(addFive).to.changeBy(getValue, 5); // Passes - changed by +5
expect(addFive).to.changeBy(getValue, -5); // Also passes - absolute value is 5
expect(subtractFive).to.changeBy(getValue, 5); // Passes - absolute value is 5
Alias for change.
Asserts that the value DOES change but NOT by the specified delta after executing the target function. The value MUST change (cannot remain the same), but the change amount must not equal the specified delta. This differs from notChangesBy which allows the value to remain unchanged.
import { expect } from "@nevware21/tripwire";
let value = 0;
const getValue = () => value;
const addTwo = () => { value += 2; };
const noOp = () => {};
expect(addTwo).to.changesButNotBy(getValue, 5); // Passes - changed by 2, not by 5
expect(addTwo).to.changesButNotBy(getValue, 2); // Fails - changed by exactly 2
expect(noOp).to.changesButNotBy(getValue, 5); // Fails - no change occurred
Alias for changeBy. The sign of the delta is ignored - only the absolute value is compared.
Provides operations for containment checks.
This operation allows you to assert that the target value contains the specified value(s). It is useful for verifying that an array, string, or object contains certain elements or properties.
import { assert } from "@nevware21/tripwire";
const arr = [1, 2, 3];
const str = "hello darkness welcome back again";
const obj = { a: 1, b: 2, c: 3 };
assert(arr).contain(2); // Passes
assert(str).contain("darkness"); // Passes
assert(obj).contain.all.keys('a', 'b'); // Passes
assert(arr).contain(4); // Fails
assert(str).contain("planet"); // Fails
assert(obj).contain.all.keys('a', 'd'); // Fails
Provides operations for containment checks.
This operation allows you to assert that the target value contains the specified value(s). It is useful for verifying that an array, string, or object contains certain elements or properties.
import { assert } from "@nevware21/tripwire";
const arr = [1, 2, 3];
const str = "hello darkness welcome back again";
const obj = { a: 1, b: 2, c: 3 };
assert(arr).contains(2); // Passes
assert(str).contains("darkness"); // Passes
assert(obj).contains.all.keys('a', 'b'); // Passes
assert(arr).contains(4); // Fails
assert(str).contains("planet"); // Fails
assert(obj).contains.all.keys('a', 'd'); // Fails
Asserts that executing the target function decreases the monitored numeric value. Can monitor either a getter function's return value or an object property. When using .by(delta), the delta value should be a positive number as a decrease is expected.
import { expect } from "@nevware21/tripwire";
// With getter function
let count = 10;
const getCount = () => count;
const decrement = () => { count--; };
expect(decrement).to.decrease(getCount);
expect(decrement).to.decrease(getCount).by(1); // delta of 1 (positive) for a decrease
// With object property
const obj = { count: 10 };
const subtractThree = () => { obj.count -= 3; };
expect(subtractThree).to.decrease(obj, 'count');
expect(subtractThree).to.decrease(obj, 'count').by(3); // delta of 3 (positive) for a decrease
Asserts that executing the target function decreases the monitored value by a specific delta. This is a direct method that doesn't require chaining with .by(). Note: The delta should be specified as a positive value representing the magnitude of the decrease. For example, if a value goes from 10 to 7, use delta of 3, not -3.
Alias for decrease.
Asserts that the value DOES decrease but NOT by the specified delta after executing the target function. The value MUST decrease (must go down), but the decrease amount must not equal the specified delta. The delta value should be a positive number as a decrease is expected.
import { expect } from "@nevware21/tripwire";
let count = 10;
const getCount = () => count;
const subtractTwo = () => { count -= 2; };
expect(subtractTwo).to.decreasesButNotBy(getCount, 5); // Passes - decreased by 2, not by 5
expect(subtractTwo).to.decreasesButNotBy(getCount, 2); // Fails - decreased by exactly 2
Alias for decreaseBy.
This operation provides access to operations that will deeplyallows you to assert that the target value deeply equals the expected value. It is useful for comparing objects, arrays, and other complex structures.
Performs an equality check between the actual and expected values, throwing an
AssertionFailure with the given message when the actual value is not equal to
the expected value. The default equality check is a loose (==) equality check,
to perform a strict equality check (===), use the IStrictlyOp.equal
(strictly.equal) operations and when comparing complex objects, use the deep
equality operations provided by the IDeepOp.equal (deep.equal) operations or
(deep.strictly.equal) for deep strict equality checks.
IStrictlyOp.eq (strictly.eq) operations.
An AssertionFailure if the expected and actual values are strictly equal.
assert.eq(1, 1); // Passes
assert.eq("a", "a"); // Passes
assert.eq(true, true); // Passes
assert.eq(false, false); // Passes
assert.eq(null, null); // Passes
assert.eq(undefined, undefined); // Passes
assert.eq(0, 0); // Passes
assert.eq(-0, -0); // Passes
assert.eq(+0, +0); // Passes
assert.eq(0n, 0n); // Passes
assert.eq("", ""); // Passes
assert.eq(Symbol(), Symbol()); // Passes
assert.eq([], []); // Throws AssertionError
assert.eq([1, 2], [1, 2]); // Throws AssertionError
Performs an equality check between the actual and expected values, throwing an
AssertionFailure with the given message when the actual value is not equal to
the expected value. The default equality check is a loose (==) equality check,
to perform a strict equality check (===), use the IStrictlyOp.equal
(strictly.equal) operations and when comparing complex objects, use the deep
equality operations provided by the IDeepOp.equal (deep.equal) operations or
(deep.strictly.equal) for deep strict equality checks.
An AssertionFailure if the expected and actual values are not strictly equal.
assert.equal(1, 1); // Passes
assert.equal("a", "a"); // Passes
assert.equal(true, true); // Passes
assert.equal(false, false); // Passes
assert.equal(null, null); // Passes
assert.equal(undefined, undefined); // Passes
assert.equal(0, 0); // Passes
assert.equal(-0, -0); // Passes
assert.equal(+0, +0); // Passes
assert.equal(0n, 0n); // Passes
assert.equal("", ""); // Passes
assert.equal(Symbol(), Symbol()); // Passes
assert.equal([], []); // Throws AssertionError
assert.equal([1, 2], [1, 2]); // Throws AssertionError
Performs an equality check between the actual and expected values, throwing an
AssertionFailure with the given message when the actual value is not equal to
the expected value. The default equality check is a loose (==) equality check,
to perform a strict equality check (===), use the IStrictlyOp.equal
(strictly.equal) operations and when comparing complex objects, use the deep
equality operations provided by the IDeepOp.equal (deep.equal) operations or
(deep.strictly.equal) for deep strict equality checks.
An AssertionFailure if the expected and actual values are strictly equal.
assert.equals(1, 1); // Passes
assert.equals("a", "a"); // Passes
assert.equals(true, true); // Passes
assert.equals(false, false); // Passes
assert.equals(null, null); // Passes
assert.equals(undefined, undefined); // Passes
assert.equals(0, 0); // Passes
assert.equals(-0, -0); // Passes
assert.equals(+0, +0); // Passes
assert.equals(0n, 0n); // Passes
assert.equals("", ""); // Passes
assert.equals(Symbol(), Symbol()); // Passes
assert.equals([], []); // Throws AssertionError
assert.equals([1, 2], [1, 2]); // Throws AssertionError
Provides operations for checking whether the target value has a specific property.
This operation allows you to assert that the target value has the specified property. It is useful for verifying that an object has a certain property.
Provides operations for inclusion checks.
This operation allows you to assert that the target value includes the specified value(s). It is useful for verifying that an array, string, or object contains certain elements or properties.
import { assert } from "@nevware21/tripwire";
const arr = [1, 2, 3];
const str = "hello darkness welcome back again";
const obj = { a: 1, b: 2, c: 3 };
assert(arr).include(2); // Passes
assert(str).include("darkness"); // Passes
assert(obj).include.all.keys('a', 'b'); // Passes
assert(arr).include(4); // Fails
assert(str).include("planet"); // Fails
assert(obj).include.all.keys('a', 'd'); // Fails
Provides operations for inclusion checks.
This operation allows you to assert that the target value includes the specified value(s). It is useful for verifying that an array, string, or object contains certain elements or properties.
import { assert } from "@nevware21/tripwire";
const arr = [1, 2, 3];
const str = "hello darkness welcome back again";
const obj = { a: 1, b: 2, c: 3 };
assert(arr).includes(2); // Passes
assert(str).includes("darkness"); // Passes
assert(obj).includes.all.keys('a', 'b'); // Passes
assert(arr).includes(4); // Fails
assert(str).includes("planet"); // Fails
assert(obj).includes.all.keys('a', 'd'); // Fails
Asserts that executing the target function increases the monitored numeric value. Can monitor either a getter function's return value or an object property.
import { expect } from "@nevware21/tripwire";
// With getter function
let count = 0;
const getCount = () => count;
const increment = () => { count++; };
expect(increment).to.increase(getCount);
expect(increment).to.increase(getCount).by(1);
// With object property
const obj = { count: 5 };
const addFive = () => { obj.count += 5; };
expect(addFive).to.increase(obj, 'count');
expect(addFive).to.increase(obj, 'count').by(5);
Asserts that executing the target function increases the monitored value by a specific delta. This is a direct method that doesn't require chaining with .by(). The delta value should be a positive number representing the expected increase.
Alias for increase.
Asserts that the value DOES increase but NOT by the specified delta after executing the target function. The value MUST increase (must go up), but the increase amount must not equal the specified delta.
import { expect } from "@nevware21/tripwire";
let count = 5;
const getCount = () => count;
const addTwo = () => { count += 2; };
expect(addTwo).to.increasesButNotBy(getCount, 5); // Passes - increased by 2, not by 5
expect(addTwo).to.increasesButNotBy(getCount, 2); // Fails - increased by exactly 2
Alias for increaseBy.
Provides operations for type and equality checks.
This operation allows you to assert that the target value is of the specified type. It is useful for verifying the type of a value, such as a number, string, or object.
Negates any performed evaluations in the change assertion chain. When used after change/increase/decrease, the returned value still supports .by() to allow patterns like expect().to.change().not.by(delta)
Provides operations for ownership checks.
This operation allows you to assert that the target object has its own property with the specified name. It is useful for verifying that an object has a property directly on itself, rather than inheriting it from its prototype chain.
Provides operations for strict equality checks.
This operation allows you to assert that the target value is strictly equal to the expected value. It is useful for comparing values without any type coercion.
Asserts that the value is a function that when executed will throw an error.
An AssertionFailure if the function does not throw an error.
An AssertionError if the error thrown does not match the expected error.
An AssertionError if the error message does not match the expected message.
Provides syntatic operations for accessing whether the target is of a specific type, has a specific property, or is strictly equal to a specific value.
A new IAssertInst with the resulting value from the change assertion. If monitoring a property, this will be the new value of that property. If monitoring a function, this will be the new return value of that function.
Asserts that the change amount (delta) matches the expected delta.
The expected change amount
OptionalevalMsg: MsgSourceOptional message to display if the assertion fails
The assertion result
Throws an AssertionFailure exception with the given message and optional
details which are obtained via the getDetails function.
Optionalmsg: MsgSourceThe message to display.
Optionaldetails: anyThe details (props) to include in the error
AssertionFailure always
Generic failure that throws an AssertionFailure exception with the given
message and optional details which are obtained via the getDetails function.
The actual value that was expected
The expected value that was not found
OptionalfailMsg: MsgSourceThe message to display.
Optionaloperator: stringThe optional operator used in the comparison
AssertionFailure always
Throws an AssertionError exception with the given message and optional
details which are obtained via the getDetails function.
The message to display.
Optionaldetails: anyThe details (props) to include in the error
AssertionFailure always
Determines whether an object has a property with the specified name.
OptionalevalMsg: MsgSourceOptionalevalMsg: MsgSourceOptionalevalMsg: MsgSourceOptionalevalMsg: MsgSource
Result type for change assertions that allows chaining .by() to verify the magnitude of change. Returned by change/increase/decrease assertions to enable fluent chaining syntax.
Since
0.1.5
Example