# @bahmutov/spok 中文文档

规范地址：https://npmcn.com/package/%40bahmutov/spok/

版本：1\.3\.1
npm 元数据更新时间：2026-10-14T02:33:34.788Z
中文译文更新时间：2026-11-07T15:00:10.798Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40bahmutov/spok
原文对照：https://npmcn.com/package/%40bahmutov/spok/?lang=original
项目主页：https://github.com/bahmutov/spok
源码仓库：https://github.com/bahmutov/spok

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：50.3 kB，19 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- 运行依赖：6 个
- 首次发布：2020-04-20T16:48:17.259Z
- 最新版本发布：2026-10-14T02:33:34.483Z
- 近 30 天下载量：62309（2026-10-08 至 2026-11-06，npm 官方下载统计）
- 已发布版本数：13（近 12 个月 2 个）

## 中文简介

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

## 安装

```sh
npm install @bahmutov/spok
```

也可以使用：`pnpm add @bahmutov/spok`、`yarn add @bahmutov/spok`、`bun add @bahmutov/spok`

## README

# 弹簧 [![](https://github.com/bahmutov/spok/workflows/test/badge.svg?branch=master)](https://github.com/bahmutov/spok/actions)

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

```js
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](https://npmcn.com/package/%40bahmutov/spok/assets/shot.png)

## 安装

```
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 文档](https://github.com/thlorenz/doctoc)_

-   [弹簧](https://npmcn.com/package/%40bahmutov/spok/#readme-spok-)
    -   [安装](https://npmcn.com/package/%40bahmutov/spok/#readme-installation)
    -   [为啥不干脆 `deepEqual`? 吗?](https://npmcn.com/package/%40bahmutov/spok/#readme-why-not-just-deepequal)
    -   [调整打印细节](https://npmcn.com/package/%40bahmutov/spok/#readme-adjusting-print-details)
    -   [API 密码](https://npmcn.com/package/%40bahmutov/spok/#readme-api)
        -   [弹簧](https://npmcn.com/package/%40bahmutov/spok/#readme-spok)
        -   [宽度](https://npmcn.com/package/%40bahmutov/spok/#readme-spokrange)
        -   [spok.gt (英语)](https://npmcn.com/package/%40bahmutov/spok/#readme-spokgt)
        -   [spok.ge (英语)](https://npmcn.com/package/%40bahmutov/spok/#readme-spokge)
        -   [spok.lt (英语)](https://npmcn.com/package/%40bahmutov/spok/#readme-spoklt)
        -   [spok.le (西班牙语)](https://npmcn.com/package/%40bahmutov/spok/#readme-spokle)
        -   [spok.ne (英语)](https://npmcn.com/package/%40bahmutov/spok/#readme-spokne)
        -   [spok.gtz (英语)](https://npmcn.com/package/%40bahmutov/spok/#readme-spokgtz)
        -   [spok.gez (西班牙语)](https://npmcn.com/package/%40bahmutov/spok/#readme-spokgez)
        -   [spok.ltz (英语)](https://npmcn.com/package/%40bahmutov/spok/#readme-spokltz)
        -   [斯波克. 莱斯](https://npmcn.com/package/%40bahmutov/spok/#readme-spoklez)
        -   [spok.type (帮助)](https://npmcn.com/package/%40bahmutov/spok/#readme-spoktype)
        -   [阵列](https://npmcn.com/package/%40bahmutov/spok/#readme-spokarray)
        -   [阵列元素](https://npmcn.com/package/%40bahmutov/spok/#readme-spokarrayelements)
        -   [阵列元素范围](https://npmcn.com/package/%40bahmutov/spok/#readme-spokarrayelementsrange)
        -   [数字](https://npmcn.com/package/%40bahmutov/spok/#readme-spoknumber)
        -   [斯波克. 字符串](https://npmcn.com/package/%40bahmutov/spok/#readme-spokstring)
        -   [sp. 1](https://npmcn.com/package/%40bahmutov/spok/#readme-spokoneof)
        -   [函数](https://npmcn.com/package/%40bahmutov/spok/#readme-spokfunction)
        -   [spok. 定义对象](https://npmcn.com/package/%40bahmutov/spok/#readme-spokdefinedobject)
        -   [启动](https://npmcn.com/package/%40bahmutov/spok/#readme-spokstartswith)
        -   [使用 spok.ends 时](https://npmcn.com/package/%40bahmutov/spok/#readme-spokendswith)
        -   [测试](https://npmcn.com/package/%40bahmutov/spok/#readme-spoktest)
        -   [spok. 定义](https://npmcn.com/package/%40bahmutov/spok/#readme-spokdefined)
        -   [spok. 不定义](https://npmcn.com/package/%40bahmutov/spok/#readme-spoknotdefined)
    -   [许可证](https://npmcn.com/package/%40bahmutov/spok/#readme-license)

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

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

`spok.*` 比较函数名称来源于 [**击打** 比较 运算符](http://www.tldp.org/LDP/abs/html/comparison-ops.html) 让他们更容易记住.

## [API 密码](https://thlorenz.github.io/spok)

### 弹簧

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

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

**参数**

-   `t` **[对象](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** 具有断言功能的 `equal` 财务报告和审定财务报表 `deepEqual` (比较对象) - 使用 **窃听**, (中文(简体) ), **磁带**, (中文(简体) ), **主张** 或任何具有这些并因此兼容的其他图书馆
-   `obj` **[对象](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** 对照
-   `specifications` **[对象](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** 核查的规格

### 宽度

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

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

**参数**

-   `min` **[数目](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** 最低
-   `max` **[数目](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** 上限

### spok.gt (英语)

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

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

**参数**

-   `n` **[数目](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** 标准

### spok.ge (英语)

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

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

**参数**

-   `n` **[数目](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** 标准

### spok.lt (英语)

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

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

**参数**

-   `n` **[数目](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** 标准

### spok.le (西班牙语)

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

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

**参数**

-   `n` **[数目](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** 标准

### spok.ne (英语)

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

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

**参数**

-   `value` **任意** 标准

### spok.gtz (英语)

指定数值大于零

```js
var spec = {
  x: spok.gtz,
}
```

### spok.gez (西班牙语)

指定数值大于或等于零

```js
var spec = {
  x: spok.gez,
}
```

### spok.ltz (英语)

指定数值小于零

```js
var spec = {
  x: spok.ltz,
}
```

### 斯波克. 莱斯

指定数值为小于或等于零

```js
var spec = {
  x: spok.lez,
}
```

### spok.type (帮助)

指定输入为特定类型.

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

**参数**

-   `t` **[字符串](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** 预期类型

### 阵列

指定输入为数组.

```js
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}你觉得呢

**参数**

-   `n` **[数目](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** 元素数量

### 阵列元素范围

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

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

**参数**

-   `min` **[数目](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** 分钟元素数
-   `max` **[数目](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** 元素的最大数量

### 数字

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

```js
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

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

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

### 函数

指定输入是一个函数.

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

### spok. 定义对象

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

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

### 启动

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

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

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

**参数**

-   `what` **[字符串](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** 子字符串应该从

### 使用 spok.ends 时

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

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

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

**参数**

-   `what` **[字符串](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** 子字符串应该从

### 测试

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

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

**参数**

-   `regex` **[正则Exp](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp)** 用来检查字符串的正则表达式 `test`

### spok. 定义

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

```js
var spec = {
  x: spok.defined,
}
```

### spok. 不定义

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

```js
var spec = {
  x: spok.notDefined,
}
```

## 许可证

麻省理工学院

## 常见问题

### @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 和提交记录判断。

