Node.js:小脚本也能用 `node:test` 先写个断言

31 次浏览2 条回复

有些工具函数很小,单独装一套测试框架有点重。Node 自带的 node:testassert,拿来给小脚本兜个底挺方便。

环境:Node.js 20+。新建两个文件:

// sum.mjs
export function sum(a, b) {
  return a + b
}
// sum.test.mjs
import test from 'node:test'
import assert from 'node:assert/strict'
import { sum } from './sum.mjs'

test('sum adds two numbers', () => {
  assert.equal(sum(2, 3), 5)
})

然后跑:

node --test sum.test.mjs

输出会带 TAP 格式,重点看有没有 fail 0

我觉得它适合那种本地小工具、脚本里的纯函数,先把最容易手滑的地方拦一下。真到大项目,再换项目统一的测试方案就行。

补一个小点:如果测试文件按常见命名放着,其实也可以直接跑 node --test,不用每次指定文件名。

比如有 sum.test.mjsformat.test.mjs 这种,命令会自己找一批测试文件。小脚本慢慢长大一点时,这个写法更省事。

node:test 里子测试也挺适合这种小工具,几个边界条件可以塞在一起,看输出时层级比较清楚:

import test from 'node:test'
import assert from 'node:assert/strict'

function trimName(s) {
  return s.trim()
}

test('trimName', async (t) => {
  await t.test('removes spaces', () => {
    assert.equal(trimName('  mesh  '), 'mesh')
  })

  await t.test('keeps empty string', () => {
    assert.equal(trimName(''), '')
  })
})

环境还是 Node.js 20+。小函数测试多起来一点时,比全摊平成一串名字舒服些。