node.js v18のテストランナー纏めました

node.js v18のテストランナー纏めました

項目 バージョン
node.js v19.6.0

node.js v16まではjestやmochaなどでテストコードを書いてましたが、v18からnode.js自体にテストランナーが追加されました。

ちなみに、v18ではconsole.logが出力されなかったり、テストランナーが使えそうにないのでv19.6.0で確認しています。

import

node:test,node:assertからimportします。node:を省略するとimportできません。

import test from 'node:test'
import assert from 'node:assert'

test('1 test', async (t) => {
  assert.strictEqual(1, 1)
})

これでテストコード完了です。

テスト実行

node --testコマンドで実行します。

$ node --test
TAP version 13
# Subtest: /mnt/c/~~~~~/index.test.mjs
ok 1 - /mnt/c/~~~~~/index.test.mjs
  ---
  duration_ms: 91.0698
  ...
1..1
# tests 1
# pass 1
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 99.9223

skip

testの第二引数に{skip:true}を指定するとそのtestはスキップされます。

import test from 'node:test'
import assert from 'node:assert'

test('1 test', { skip: true }, (t) => {
  assert.strictEqual(1, 2)
})

node --testで実行すると確かにskipされますが、skip数がカウントされていない気がします。

$ node --test

// ~~~ 省略
# tests 1
# pass 1
# fail 0
# cancelled 0
# skipped 0 ★
# todo 0
# duration_ms 93.7253

only

testの第二引数に{only:true}を指定し、node --test --test-onlyで実行すれば、そのtestだけが実行されます。

import test from 'node:test'
import assert from 'node:assert'
import {handler} from './index.mjs'


test('1 test', (t) => {
  assert.strictEqual(1, 1)
})

test('2 test', {only:true}, (t) => {
   assert.strictEqual(1, 1)
})

node --testとすると、{only:true}としていても無意味です。

describe/it

mochaのようにdescribe,itを使用することができます。describe,itはnote:testモジュールからimportします。

import {describe,it} from 'node:test'
import assert from 'node:assert'

describe('A thing', () => {
  it('1 test', () => {
    assert.strictEqual(1, 1)
  })
  it('2 test', () => {
    assert.strictEqual(1, 1)
  })
})

describe.skipでスキップできます。describe.onlyはありません。

it.skipでスキップできます。it.onlyはありません。

どちらも、testのonlyと同様に{only:true}オプション指定して、node --test --test-onlyでテスト実行する必要があります。

beforeEach,before,afterEach,after

それぞれ実行されるタイミングは以下の通りです。

メソッド タイミング
beforeEach 各テストスイート前に1回
before テスト前に1回だけ
afterEach 各テストスイート後に1回
after テスト後に1回だけ

この辺はmochaと同じようです。node:testよりimportします。

import {beforeEach,before,afterEach,after} from 'node:test'

参考サイト

Test runner | Node.js v18.19.0 Documentation
Test runner | Node.js v21.6.1 Documentation

コメント

タイトルとURLをコピーしました