Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/hazae41/phobos
Modern and minimalist testing library for the web
https://github.com/hazae41/phobos
asynchronous browser concurrency deno esmodules fast javascript minimalist parallel-computing testing typescript unit-testing web
Last synced: 29 days ago
JSON representation
Modern and minimalist testing library for the web
- Host: GitHub
- URL: https://github.com/hazae41/phobos
- Owner: hazae41
- Created: 2022-12-11T12:55:02.000Z (about 2 years ago)
- Default Branch: master
- Last Pushed: 2023-01-17T14:29:07.000Z (almost 2 years ago)
- Last Synced: 2024-11-15T20:36:49.052Z (about 2 months ago)
- Topics: asynchronous, browser, concurrency, deno, esmodules, fast, javascript, minimalist, parallel-computing, testing, typescript, unit-testing, web
- Language: TypeScript
- Homepage:
- Size: 127 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
Awesome Lists containing this project
README
Modern and minimalist testing library```bash
npm i @hazae41/phobos
```[**Node Package 📦**](https://www.npmjs.com/package/@hazae41/phobos)
## Philosophy 🧠
Phobos aims to be minimalist and to always work no matter the:
- runtime (Node, Deno, browser)
- module resolution (ESM, CommonJS)
- language (TypeScript, JavaScript)
- bundler (Rollup, Vite)It's just a library you can import everywhere! That's it, no CLI, no configuration file, just JavaScript.
## Features 🔥
### Current features
- 100% TypeScript and ESM
- No external dependency
- Unit tested (by itself)
- Runnable in the browser
- Minimalist assertion helpers
- Asynchronous fork-join parallelism
- Function calls spying### [Upcoming features](https://github.com/sponsors/hazae41)
- Mocks
- Diffing## Usage 🚀
```typescript
import { assert, test } from "@hazae41/phobos"test("it should work", async () => {
assert(false, "oh no")
})
``````bash
ts-node --esm ./test.ts
```### Concurrent tests
Test blocks are always executed concurrently, unless you `await` them
```typescript
import { assert, test } from "@hazae41/phobos"test("it should work", async ({ test }) => {
// run in sequence
await test("first test", async () => {
assert(true, "should be true")
})
// or in parallel
test("second test", async () => {
assert(true, "should be true")
})
})
```You can also use `await wait()` to forcefully join
```typescript
import { assert, test } from "@hazae41/phobos"test("it should work", async ({ test, wait }) => {
test("first test", async () => {
assert(true, "should be true")
})
test("second test", async () => {
assert(true, "should be true")
})// wait first and second tests
await wait()test("third test", async () => {
assert(true, "should be true")
})
})
```### Spying function calls
You can spy on function calls using `spy(function)`
You can then `.call()` it and get a list of all its `.calls`
```typescript
import { assert, test, spy } from "@hazae41/phobos"test("it should work", async () => {
const f = spy((param: boolean) => !param)const result = f.call(true)
assert(result === false, `result should be false`)assert(f.calls.length === 1, `should have been called 1 time`)
assert(f.calls[0].params[0] === true, `should have been called with true`)
assert(f.calls[0].result === false, `should have resulted in false`)
})
```## Setting up 🔧
Most setups will just need a custom entry point that imports all your tests, that you either run as-is using `ts-node`, or that you transpile using your favorite bundler.
For example, the entry point `index.test.ts` imports:
- `some-module/index.test.ts`, which imports:
- `some-module/some-file.test.ts`
- `some-module/some-other-file.test.ts`
- `some-other-module/index.test.ts`, which imports:
- `some-other-module/some-file.test.ts`
- `some-other-module/some-other-file.test.ts`You can see an example on this repository, all tests are imported in `src/index.test.ts`, then we use Rollup to transpile it into `dist/test/index.test.cjs`, which we then run using Node with `node ./dist/test/index.test.cjs`.
## Running 🏎️
#### Using a bundler
```bash
node ./dist/test/index.test.cjs
```#### Using ts-node with ESM
```bash
ts-node --esm ./src/index.test.ts
```#### Using ts-node with ESM and ttypescript
```bash
ts-node --esm --compiler ttypescript ./src/index.test.ts
```#### Using dynamic import
```typescript
await import("index.test.ts")
```