Unitest
Deno-first universal unit testing framework
jest like testing easy
🚧 This is still beta
expect
import { expect } from "https://deno.land/x/unitest@VERSION/mod.ts";
expect("").toBe("");
Custom matcher
It provides custom matcher interface.
You can add custom matcher easy. The type is automatically extended.
import { defineExpect, jestMatcherMap } from "https://deno.land/x/unitest@VERSION/mod.ts";
const expect = defineExpect({
...jestMatcherMap
toBe100: (actual) => {
if (actual === 100) return { pass: true };
return {
pass: false,
message,
};
},
});
expect(1000).not.toBe100();
Power of TypeScript
Take full advantage of the power of TypeScript's type analysis.
In the example above, the actual toBe100
takes no arguments. (It's not
variadic arguments.)
The matcher takes an actual
value as its first argument. However, in the type
definition, the actual
value is removed. This is accomplished by TypeScript.
Let's look at a more advanced example.
The type definition of a matcher toBeGreaterThan
looks like this.
function toBeGreaterThan(
actual: number | bigint,
comparison: number | bigint,
) {}
toBeGreaterThan
takes a number
| bigint
as comparison
. Therefore, the
actual
value should also be number
| bigint
. Because jest
separated the
matcher implementation from its type definition, it was difficult to give
actual
a type other than any
.
In this project, we use all the power of TypeScript.
The type of actual
will filter the available matchers.
For example, if actual
has a value of type string
, only matchers with a
first argument of a type compatible with string
will be available.
expect("hello").toBeUndefined();
expect("world").toMatch(/hello/);
// This will result in a type error.
// expect('world').toBeGreaterThan(0)
expect(10).toBeUndefined();
expect(10).toBeGreaterThan(3);
// This will result in a type error.
// expect(10).toMatch("10")
This allows TypeScript to do some of the assertions for you.
TODO
- Implement expecter and jest default matcher (rest)
- toHaveProperty
- toContainEqual
- toMatchObject
- toMatchSnapshot
- toMatchInlineSnapshot
- toStrictEqual
- toThrowErrorMatchingSnapshot
- toThrowErrorMatchingInlineSnapshot
- Implement third party matcher
- jest-extended
- toBeEmpty
- toBeOneOf
- toBeNil
- toSatisfy
- toBeArray
- toBeArrayOfSize toHaveLength
- toIncludeAllMembers
- toIncludeAllPartialMembers
- toIncludeAnyMembers
- toIncludeSameMembers
- toSatisfyAll
- toSatisfyAny
- toBeBoolean
- toBeTrue
- toBeFalse
- toBeDate
- toBeValidDate
- toBeAfter
- toBeBefore
- toBeAfterOrEqualTo
- toBeBeforeOrEqualTo
- toBeBetween
- toBeFunction
- toThrowWithMessage
- toHaveBeenCalledBefore
- toHaveBeenCalledAfter
- toHaveBeenCalledOnce
- toBeNumber
- toBeNaN exists in jest
- toBeFinite
- toBePositive
- toBeNegative
- toBeEven
- toBeOdd
- toBeWithin
- toBeInteger
- toBeObject
- toBeEmptyObject
- toContainKey
- toContainKeys
- toContainAllKeys
- toContainAnyKeys
- toContainValue
- toContainValues
- toContainAllValues
- toContainAnyValues
- toContainEntry
- toContainEntries
- toContainAllEntries
- toContainAnyEntries
- toBeExtensible
- toBeFrozen
- toBeSealed
- toResolve
- toReject
- toBeString
- toBeHexadecimal
- toBeDateString
- toEqualCaseInsensitive
- toStartWith
- toEndWith
- toInclude
- toIncludeRepeated
- toIncludeMultiple
- toEqualIgnoringWhitespace
- toBeSymbol
- jest-extended
- Implement interface of custom matcher
- Implement
it
suite - Implement
describe
suite
License
Copyright © 2021-present TomokiMiyauci.
Released under the MIT license