@bahmutov/spok

中文文档
1.3.1发布于 2026/10/14MITTypeScriptCommonJS构建来源已验证近 30 天下载 6.2万

对照特定规格检查给定对象,使您无法写出锅炉板测试.

中文使用文档
文档目录30 节
  1. 安装
  2. 为啥不干脆 deepEqual ? 吗?
  3. 调整打印细节
  4. API 密码
  5. 弹簧
  6. 宽度
  7. spok.gt (英语)
  8. spok.ge (英语)
  9. spok.lt (英语)
  10. spok.le (西班牙语)
  11. spok.ne (英语)
  12. spok.gtz (英语)
  13. spok.gez (西班牙语)
  14. spok.ltz (英语)
  15. 斯波克. 莱斯
  16. spok.type (帮助)
  17. 阵列
  18. 阵列元素
  19. 阵列元素范围
  20. 数字
  21. 斯波克. 字符串
  22. sp. 1
  23. 函数
  24. spok. 定义对象
  25. 启动
  26. 使用 spok.ends 时
  27. 测试
  28. spok. 定义
  29. spok. 不定义
  30. 许可证

弹簧

对照特定规格检查给定对象,使您无法写出锅炉板测试.

var test = require('tape')
var spok = require('spok')

// this would be returned from a function you are testing
var object = {
  one: 1,
  two: 2,
  three: 3,
  four: 4,
  helloWorld: 'hello world',
  anyNum: 999,
  anotherNum: 888,
  anArray: [1, 2],
  anotherArray: [1, 2, 3],
  anObject: {},
}

// custom specification
function hasThreeElements(a) {
  return a.length === 3
}

test('my object meets the specifications', function(t) {
  spok(t, object, {
    $topic: 'spok-example',
    one: spok.ge(1),
    two: 2,
    three: spok.range(2, 4),
    four: spok.lt(5),
    helloWorld: spok.startsWith('hello'),
    anyNum: spok.type('number'),
    anotherNum: spok.number,
    anArray: spok.array,
    anotherArray: hasThreeElements,
    anObject: spok.ne(undefined),
  })
  t.end()
})

shot

安装

npm install spok

为啥不干脆 deepEqual? 吗?

deepEqual 在多数情况下都很好,但在某些情况下你需要更多的控制,即.

  • 数值并不完全吻合,而是在一定范围内
  • 您想要提供一个前提来确定一个值是否正确
  • 您只想要检查对象中包含的一子集值

调整打印细节

默认的 spok 打印出特定断言所拼接的规格,即. satisfies: spok.range(2, 4)。 。 。 . 你可以通过 spok.printSpec = false。 。 。 .

另一方面,如果你想要更多细节 关于Satisized的规格做 spok.printDescription = true 而不是去获得 要打印诸如 satisfies: spok.range(2, 4) 2 <= value <= 4。 。 。 .

相片和描述被用灰色印刷出,这样可以专注于测试输出的实际值.

目录 生成方式 DocTOC 文档

spok提供了几个常见的规格函数. 但是,你也可以写自己的功能,只要返回 true 如果符合规格 false 如果不是(见上文实例).

如果您写了一个对他人有用的规格函数,请加上一个测试并提供一个PR.

spok.* 比较函数名称来源于 击打 比较 运算符 让他们更容易记住.

API 密码

弹簧

对照对象检查给定的规格.

测试完成后 实际数 打印值以校验同时 如果其中之一失败,则每个规格都得到验证并造成测试失败.

参数

  • t 对象 具有断言功能的 equal 财务报告和审定财务报表 deepEqual (比较对象) - 使用 窃听, (中文(简体) ), 磁带, (中文(简体) ), 主张 或任何具有这些并因此兼容的其他图书馆
  • obj 对象 对照
  • specifications 对象 核查的规格

宽度

分明给定数字在给定范围内,即. min<= x <=max。 。 。 .

var spec = {
  x: spok.range(1, 2), // specifies that x should be >=1 and <=2
}

参数

spok.gt (英语)

说明数字大于给定的标准.

var spec = {
  x: spok.gt(1), // specifies that x should be >1
}

参数

spok.ge (英语)

说明一个数字大于或等于给定的标准.

var spec = {
  x: spok.ge(1), // specifies that x should be >=1
}

参数

spok.lt (英语)

说明一个数字低于给定的标准.

var spec = {
  x: spok.lt(1), // specifies that x should be < 1
}

参数

spok.le (西班牙语)

说明一个数字低于或等于给定的标准.

var spec = {
  x: spok.le(1), // specifies that x should be <=1
}

参数

spok.ne (英语)

指定该值不等于另一个值.

var spec = {
  x: spok.ne(undefined), // specifies that x should be defined
}

参数

  • value 任意 标准

spok.gtz (英语)

指定数值大于零

var spec = {
  x: spok.gtz,
}

spok.gez (西班牙语)

指定数值大于或等于零

var spec = {
  x: spok.gez,
}

spok.ltz (英语)

指定数值小于零

var spec = {
  x: spok.ltz,
}

斯波克. 莱斯

指定数值为小于或等于零

var spec = {
  x: spok.lez,
}

spok.type (帮助)

指定输入为特定类型.

var spec = {
  x: spok.type('number'), // specifies that x should be a Number
}

参数

阵列

指定输入为数组.

var spec = {
  x: spok.array, // specifies that x should be an Array
}

阵列元素

指定输入是含有特定数量元素的数组

var spec = { (中文(简体) ) x: spok.arrayElements(2) // 指定x应为有2个元素的阵列 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢

参数

阵列元素范围

指定输入是含有一定范围内若干元素的数组

var spec = { (中文(简体) ) x: spok.arrayElements Range (2, 4) // 指定x应为有 2-4 元素的阵列 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢

参数

  • min 数目 分钟元素数
  • max 数目 元素的最大数量

数字

指定类型编号和 isNaN(x) 返回时 false。 。 。 .

var spec = {
  x: spok.number, // specifies that x should be a Number
}

斯波克. 字符串

指定输入为字符串.

var spec = {
  x: spok.string  // specifies that x should be a String
}

sp. 1

检查该值是否存在于列表中

var spec = {
  role: spok.oneOf(['intern', 'employee']),
}

函数

指定输入是一个函数.

var spec = {
  x: spok.function  // specifies that x should be a function
}

spok. 定义对象

指定输入是对象而不是对象 null。 。 。 .

var spec = {
  x: spok.definedObject, // specifies that x is a non-null object
}

启动

指定字符串以指定的子字符串开头.

页:1:只有具备ES6的节点.js可用 startsWith 函数

var spec = {
  x: spok.startsWith('hello'), // specifies that x should start with 'hello'
}

参数

使用 spok.ends 时

指定字符串以指定的子字符串结尾.

页:1:只有具备ES6的节点.js可用 endsWith 函数

var spec = {
  x: spok.endsWith('hello'), // specifies that x should start with 'hello'
}

参数

测试

指定字符串需要匹配给定正则表达式.

var spec = {
  x: spok.test(/hello$/), // specifies that x should match /hello$/
}

参数

  • regex 正则Exp 用来检查字符串的正则表达式 test

spok. 定义

指定一个值被定义,即它不是 null 也没有 undefined。 。 。 .

var spec = {
  x: spok.defined,
}

spok. 不定义

指定一个数值不是定义的,即它是 null 或者说 notDefined。 。 。 .

var spec = {
  x: spok.notDefined,
}

许可证

麻省理工学院

版本与发布记录

@bahmutov/spok 共发布 13 个版本,首次发布于 2020/04/21;过去 12 个月发布了 2 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.3.1latest2026/10/1424 天前
1.3.02026/10/1424 天前
1.2.102025/08/291.2 年前
1.2.92025/08/291.2 年前
1.2.82025/08/291.2 年前
1.2.72023/07/263 年前

关于 @bahmutov/spok 的常见问题

@bahmutov/spok 是什么?

对照特定规格检查给定对象,使您无法写出锅炉板测试.

如何安装 @bahmutov/spok?

在项目目录运行 npm install @bahmutov/spok,或使用 pnpm add / yarn add / bun add。

@bahmutov/spok 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@bahmutov/spok 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@bahmutov/spok 可以商用吗?

@bahmutov/spok 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@bahmutov/spok 的下载量有多少?

根据 npm 官方下载统计,@bahmutov/spok 在 2026/10/08 – 2026/11/06 这 30 天内被下载 62,309 次,日均约 2,077 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@bahmutov/spok 还在维护吗?

最新版本 1.3.1 发布于 2026/10/14(24 天前);至今共发布 13 个版本,其中过去 12 个月发布了 2 个;首次发布于 2020/04/21。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。