A lightweight, dependency-free JavaScript testing utility. This project is framework-agnostic and usable in both browser and Node.js environments.
- Current Version: 2.1.8
- Author: Ilan Moyal
- Website: https://www.moyal.es
- License: MIT
- NPM: https://www.npmjs.com/package/@moyal/js-test
- API Documentation: View online
- Installation
- Importing
- Features
- Quick Start
- Custom Logger Support
- Exported Modules and Classes
- Version Access
- Example files and test files
- License
- Author
npm install @moyal/js-test
import { Test } from "@moyal/js-test";
const { Test } = require("@moyal/js-test");
<!-- From jsDelivr CDN (minified version) -->
<script type="module">
import "https://cdn.jsdelivr.net/npm/@moyal/js-test@2.1.8/dist/moyal.test.umd.min.js";
</script>
<!-- From jsDelivr CDN (non minified version with documentation) -->
<script type="module">
import "https://cdn.jsdelivr.net/npm/@moyal/js-test@2.1.8/dist/moyal.test.umd.js";
</script>
Or using unpkg:
<script type="module">
import "https://unpkg.com/@moyal/js-test@2.1.8/dist/moyal.test.umd.min.js";
</script>
- Minimalistic test runner with zero dependencies.
- Works in both browser and Node.js environments.
- Fluent-style test groups for structured assertions.
- Rich console output with color-coded results and grouping.
- Lazy evaluation support for deferred execution (note: not true async test execution).
- Built-in assertion types: equality, throws, null/undefined checks, and sequence comparison.
- Utilities for test numbering and hierarchical auto-numbering.
- Pluggable logger interface with default support for:
- Browser
console
- Node.js
console
with indentation and ANSI coloring - Fallback printer for unknown environments
- Browser
See also quick-start folder for the source code of the examples.
import {MultiLevelAutoNumbering, TestGroup} from '@moyal/js-test';
new TestGroup("MLA Numbered Tests")
.areNotEqual("Validate inequality", 1, 2)
.areEqual("Test strings", "foo", "foo")
.groupStart("Nested test group")
.isFalse("This is lie", () => 1 == 2)
.areEqual("Test B2", "Hello World!", () => "Hello World!")
.groupClose();
.areEqual("Test booleans", true, true)
.areEqual("Test C", 123, 123)
.run(true, new MultiLevelAutoNumbering());
In this quick start example:
- Test group enable chaining test calls, as well as creating nested test groups.
- Values, functions and lambda expressions are supported for both expected and actual.
- Test is delayed until run is called.
- Passing true to run, print results to the the console; false prints nothing; null or undefined prints only errors.
- Passing an instance of MultiLevelAutoNumbering auto enumerate the tests.
More examples can be found in examples and test/units.
Override console output with your custom logger:
import {Test, LoggerBase} from '@moyal/js-test';
class MyLogger extends LoggerBase {
/* implement logger methods */
log(message, color, ...args) { /* ... */}
info(message, color, ...args) { /* ... */ }
warn(message, color, ...args) { /* ... */ }
error(message, color, ...args) { /* ... */ }
group(label, color) { /* ... */ }
groupCollapsed(label, color) { /* ... */ }
groupEnd() { /* ... */ }
}
Test.logger = new MyLogger();
Note The logger methods are chainable.
-
Test
- Contains static method for testing. -
TestBase
- Derive your class from TestBase to create custom test. -
Assert
- Base class for assertions. -
IsDefined
- Asserts that the specified evaluates to defined value. -
IsUndefined
- Asserts that the specified evaluates to undefined value. -
IsFalse
- Asserts that the specified evaluates tofalse
. -
IsTrue
- Asserts that the specified evaluates tofalse
. -
IsNull
- Asserts that the specified evaluates tonull
. -
IsNotNull
- Asserts that the specified evaluates to nonnull
value. -
AreEqual
- Asserts that the specified values evaluations are equal. -
AreNotEqual
- Asserts that the specified values evaluations are not equal. -
ThrowsBase
- Base class to test error throwing. -
Throws
- Asserts that the specified throws error. -
NoThrows
- Asserts that the specified does not throw error. -
SequencesAreEqual
- Asserts that the specified sequences are equal. -
TestGroup
- Groups and enables chaining of multiple tests.
-
SequentialText
- Utility class to generate sequential text. -
AutoNumbering
- Utility class to generate automatic incremented number. -
MultiLevelAutoNumbering
- Utility class to generate automatic incremented number.
-
LoggerBase
- Base class for logger. -
SimpleLogger
- Simple logger for unknown environments. -
BrowserLogger
- Console logger for browser. -
NodeLogger
- Console logger for NodeJS.
The namespace MoyalTest
is also exported which wrapping all these types.
Access the library version directly:
import * as myLib from "@moyal/js-test";
myLib.Version // → e.g., "2.1.8"
Example files can be found under examples
folder and/or test/units
folder
(You can treat these test files as examples)
MIT License - free to use, modify, and distribute.
Ilan Moyal Website: https://www.moyal.es
GitHub: Ilan Moyal
LinkedIn: Ilan Moyal