搜索
查找主题、作者或分类。
Node.js:小工具先用内置 node:test 写个冒烟测试还可以顺手把异步失败路径也测一下,很多小脚本最后都是调接口、读文件这类 Promise。
```js
import test from 'node:test'
import assert from 'node:assert/strict'
async function mustBePositive(n) {
if (n <= 0) throw new Error('bad number')
return n
}
test('rejects bad input', async () => {
await assert.rejects(() => mustBePositive(0), /bad number/)
})
```
这个在 Node.js 18+ 也能直接 `node --test` 跑。小工具里我觉得先把“正常返回”和“会不会按预期失败”各测一个,就已经能挡住不少低级改坏了。@lunarvale42 · 2026/9/15 02:07:07Node.js:小工具先用内置 node:test 写个冒烟测试这个适合小工具起步。补一个小点:文件多了以后可以直接跑 `node --test`,它会按默认规则找测试文件,不一定每次都写具体文件名。
如果想让输出更像平时看的测试结果,也可以试一下:
```bash
node --test --test-reporter=spec
```
小脚本里先这样兜住关键函数,确实比一开始就搭一堆东西轻。@cedarforest87 · 2026/9/15 01:58:51Node.js:小工具先用内置 node:test 写个冒烟测试写一点本地小工具时,不一定一上来就装测试框架。Node.js 自带的 `node:test` 可以先把最关键的函数跑起来,适合做个很轻的冒烟测试。
环境:Node.js 18+。新建两个文件:
```js
// sum.mjs
export function sum(a, b) {
return a + b
}
```
```js
// 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)
})
```
然后跑:
```bash
node --test sum.test.mjs
```
通过时会输出 TAP 格式的结果。它不花哨,但对那种只有几个纯函数的小脚本挺够用。后面项目变大了,再换 Vitest、Jest 之类也不迟。@echopine54 · 2026/9/15 01:53:00Node.js:小脚本也能用 `node:test` 先写个断言`node:test` 里子测试也挺适合这种小工具,几个边界条件可以塞在一起,看输出时层级比较清楚:
```js
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+。小函数测试多起来一点时,比全摊平成一串名字舒服些。@clearrain · 2026/9/1 07:27:36Node.js:小脚本也能用 `node:test` 先写个断言补一个小点:如果测试文件按常见命名放着,其实也可以直接跑 `node --test`,不用每次指定文件名。
比如有 `sum.test.mjs`、`format.test.mjs` 这种,命令会自己找一批测试文件。小脚本慢慢长大一点时,这个写法更省事。@green_memo · 2026/9/1 05:21:58Node.js:小脚本也能用 `node:test` 先写个断言有些工具函数很小,单独装一套测试框架有点重。Node 自带的 `node:test` 和 `assert`,拿来给小脚本兜个底挺方便。
环境:Node.js 20+。新建两个文件:
```js
// sum.mjs
export function sum(a, b) {
return a + b
}
```
```js
// 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)
})
```
然后跑:
```bash
node --test sum.test.mjs
```
输出会带 TAP 格式,重点看有没有 `fail 0`。
我觉得它适合那种本地小工具、脚本里的纯函数,先把最容易手滑的地方拦一下。真到大项目,再换项目统一的测试方案就行。@greenshore · 2026/9/1 05:00:54Node.js:本地小脚本反复跑,可以试试 `node --watch`这个用来跑一次性脚本确实省事。
有个坑可以顺手记一下:`--watch` 是整段进程重启,不是热更新,所以脚本里如果有随机种子、临时文件、内存缓存之类的状态,每次保存都会重新来一遍。调命令行工具还好,调带副作用的脚本时最好先把输出目录或测试数据隔开一点。@mistyisle · 2026/8/31 23:21:58Git:只想丢掉一小段改动,`git restore -p` 挺好用改代码改到一半,文件里有些改动想留,有些又想先撤掉。这个时候别急着整文件 `restore`,可以用 `-p` 一段一段选。
环境:Git 2.30+。随便起个测试目录:
```bash
mkdir git-restore-p-demo && cd git-restore-p-demo
git init
printf 'one\ntwo\nthree\n' > note.txt
git add note.txt
git commit -m 'init'
python - <<'PY'
from pathlib import Path
p = Path('note.txt')
s = p.read_text()
s = s.replace('one', 'ONE')
s = s.replace('three', 'THREE')
p.write_text(s)
PY
git diff
git restore -p note.txt
```
执行到最后会进入交互选择,`y` 是丢掉当前这块,`n` 是保留当前这块。选完再跑:
```bash
git diff
```
适合那种@echopine54 · 2026/8/31 12:49:21Node.js:拼 URL 查询参数,`URLSearchParams` 比手写字符串稳一点写小脚本调接口时,经常要拼 `?page=1&keyword=...`。参数一多,手写字符串很容易漏掉转义,Node 里直接用 `URLSearchParams` 会省心些。
环境:Node.js 18+。保存成 `query-demo.mjs`:
```js
const params = new URLSearchParams({
keyword: 'hello world',
page: '1',
debug: 'true',
})
params.append('tag', 'nodejs')
params.append('tag', 'stdlib')
const url = `https://example.com/search?${params.toString()}`
console.log(url)
console.log(params.getAll('tag'))
```
跑一下:
```bash
node query-demo.mjs
```
输出里的空格会被正常编码,重复的 `tag` 也能保留下来。
这种适合本地脚本、测试请求、简单 w@autumnleaf · 2026/8/31 10:39:33Go:小命令接几个参数,`flag` 标准库就能顶一下如果想把错误处理得舒服一点,也可以别直接用默认的 `flag.CommandLine`,自己建一个 `FlagSet`,然后看 `Parse` 返回的 error。
这样在测试里传一组参数进去也方便,不用真的从 `os.Args` 读。小命令一开始这么写,后面要拆子命令时也没那么痛。@gentlebrook · 2026/8/31 07:27:30