@chzky/cest
v0.5.6
Published
`@chzky/cest` 旨在提供一个简洁直观的 API,用于编写和组织你的测试。它支持异步测试、跳过测试、以及按顺序执行的步骤测试,并提供了一套断言工具来帮助你验证代码行为。
Readme
@chzky/cest : 一个简易的测试框架
@chzky/cest 旨在提供一个简洁直观的 API,用于编写和组织你的测试。它支持异步测试、跳过测试、以及按顺序执行的步骤测试,并提供了一套断言工具来帮助你验证代码行为。
特性
- 简洁的 API: 易于上手,语法直观。
- 异步测试支持: 原生支持
async/await。 - 步骤测试: 允许你将测试拆分成多个有序的步骤,并支持前一个步骤的结果传递给下一个步骤。
- 断言库: 提供了一套常用的断言函数,包括相等性检查、错误抛出检查、匹配检查等。
- 可跳过测试: 轻松地跳过不需要执行的测试。
- 控制台输出: 清晰的测试结果输出。
安装
npm install @chzky/cest
# 或者
yarn add @chzky/cest
# 或者
pnpm add @chzky/cest使用
基本测试
使用 Cest 函数来定义你的测试。
import { Cest, assert } from '@chzky/cest';
Cest('我的第一个测试', () => {
assert(1 + 1 === 2, '1加1应该等于2');
assert.equal({ a: 1 }, { a: 1 }, '对象应该相等');
});
Cest('异步操作测试', async () => {
const result = await Promise.resolve(42);
assert.equal(result, 42, '异步结果应该为42');
});跳过测试
你可以使用 skip 属性来跳过一个测试。
import { Cest } from '@chzky/cest';
Cest({ name: '这个测试会被跳过', skip: true }, () => {
// 这段代码不会执行
console.log('我不会被打印出来');
});步骤测试 (Cester.step)
对于需要按顺序执行的测试步骤,你可以使用 Cester 的 step 方法。每个 step 都可以选择接收前一个 step 的返回值。
import { Cest, assert } from '@chzky/cest';
Cest('计算器测试').step('初始化为0', () => {
return 0;
}).step('加5', (prevResult) => {
assert.equal(prevResult, 0, '初始值应为0');
return prevResult + 5;
}).step('乘以2', (prevResult) => {
assert.equal(prevResult, 5, '加5后应为5');
return prevResult * 2;
}).step('最终结果为10', (prevResult) => {
assert.equal(prevResult, 10, '最终结果应为10');
}).run(); // 运行步骤测试你也可以直接使用 Cest(name) 返回的 Cester 实例来定义单一测试:
import { Cest, assert } from '@chzky/cest';
const myTests = Cest('我的模块测试');
myTests.test(() => {
assert(true, '这是一个通过的测试');
});
myTests.skip(() => {
console.log('这个测试被跳过了');
});断言 (assert)
@chzky/cest 提供了一个 assert 对象,包含多种断言方法:
assert(condition, message): 最基本的断言,当condition为false时抛出错误。assert.every(...conditions): 断言所有条件都为true。assert.some(...conditions): 断言至少一个条件为true。assert.reverse(condition, message): 反向断言,当condition为true时抛出错误。assert.throw(fn, instanceOf): 断言fn函数会抛出错误。如果提供了instanceOf,则断言抛出的错误是指定类型的实例。assert.sequence(message): 返回一个函数,用于断言一系列操作按预期顺序执行。const checkOrder = assert.sequence('顺序错误'); checkOrder(1); // 第一次调用期望1 checkOrder(2); // 第二次调用期望2assert.equal(actual, expected): 断言actual和expected深度相等。支持基本类型、对象、数组、Map、Set、Date、RegExp、URL等。assert.unreachable(message): 断言此行代码永远不应被执行到。assert.when(condition, fn): 如果condition为true,则执行fn。assert.match(value, pattern): 断言value匹配pattern。pattern可以是字符串(value包含pattern)或正则表达式(value匹配pattern)。
全栈堆栈跟踪 (fullstack)
默认情况下,当测试失败时,@chzky/cest 只会显示导致失败的堆栈行。如果你需要完整的堆栈跟踪,可以设置 fullstack: true。
import { Cest, assert } from '@chzky/cest';
Cest({ name: '需要完整堆栈的错误测试', fullstack: true }, () => {
throw new Error('这是一个自定义错误'); // 会显示完整的堆栈
});启用/禁用测试运行
@chzky/cest 提供了一个全局开关,可以临时禁用所有测试的运行。这在某些生产环境或特定场景下可能很有用。
import { Cest, enable, close } from '@chzky/cest';
// 默认情况下,测试是启用的
Cest('这个测试会运行', () => {
console.log('我运行了');
});
close(); // 禁用所有测试
Cest('这个测试不会运行', () => {
console.log('我不会运行');
});
enable(); // 重新启用所有测试
Cest('这个测试会再次运行', () => {
console.log('我再次运行了');
});