@humanfs/test v0.15.0
@humanfs/test
If you find this useful, please consider supporting my work with a donation or nominate me for a GitHub Star.
Description
Testing utilities for humanfs.
!WARNING This project is experimental and may change significantly before v1.0.0. Use at your own caution and definitely not in production!
Installation
Node.js
Install using your favorite package manager for Node.js:
npm install @humanfs/test
# or
pnpm install @humanfs/test
# or
yarn add @humanfs/test
# or
bun install @humanfs/testThen you can import the Hfs and Path classes like this:
import { HfsImplTester } from "@humanfs/test";Deno
For Deno, set up a deno.json file like this:
{
"imports": {
"@humanfs/test": "npm:@humanfs/test@latest"
}
}Then you can import the Hfs class like this:
import { HfsImplTester } from "@humanfs/test";Browser
It's recommended to import the minified version to save bandwidth:
import { HfsImplTester } from "https://cdn.skypack.dev/@humanfs/test?min";However, you can also import the unminified version for debugging purposes:
import { HfsImplTester } from "https://cdn.skypack.dev/@humanfs/test";Usage
Prerequisites
At a minimum, an impl must implement these methods to use HfsImplTester:
bytes()createDirectory()deleteAll()isDirectory()isFile()write()
The HfsImplTester Class
The HfsImplTester class contains built-in testing for impls to ensure that they comply with the HfsImpl interface. This class is testrunner agnostic, and you must provide a directory to work in, the equivalent of describe and it, and an assertion library, in order for it work correctly. Here's an example for Node.js:
// Node.js
import { describe, it, beforeEach, afterEach } from "node:test";
import assert from "node:assert";
import path from "node:path";
const tester = new HfsImplTester({
outputDir: path.resolve(process.cwd(), ".hfs-tests"),
assert,
test: {
describe,
it,
beforeEach,
afterEach
}
});For Deno, you'll need to import the relevant modules and assign them to match the Node.js APIs, such as:
import {
describe,
it,
beforeEach,
afterEach,
} from "https://deno.land/std/testing/bdd.ts";
import {
assert,
assertEquals,
assertObjectMatch,
assertRejects,
} from "https://deno.land/std/assert/mod.ts";
import * as path from "https://deno.land/std/path/mod.ts";
const tester = new HfsImplTester({
outputDir: path.resolve(Deno.cwd(), ".hfs-tests"),
assert: {
strictEqual: assertEquals,
deepStrictEqual: assertObjectMatch,
rejects: assertRejects,
ok: assert,
},
test: {
describe,
it,
beforeEach,
afterEach,
},
});Once set up, you can run the tests like this:
await tester.test({
name: "Name to show up in test output",
impl: new MyImpl()
});The HfsImplTester will only run tests for the minimum required methods plus any additional interface methods found.
License
Apache 2.0