カテゴリー
【nodejsでユニットテスト】Mocha/ChaiのESModule対応〜ビルドインTest runnerを参考に動作させてみる
※ 当ページには【広告/PR】を含む場合があります。
2023/04/15
一旦、純正Test Runnerを使ってみる
Test runnerを使ってみる
$ node --version
v20.10.0
$ node --test
ℹ tests 0
ℹ suites 0
ℹ pass 0
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 110.593313
$ node --test hoge.js
hoge.js
$ node --test hoge.ts
node:internal/modules/esm/get_format:160
throw new ERR_UNKNOWN_FILE_EXTENSION(ext, filepath);
^
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /********/hoge.ts
at Object.getFileProtocolModuleFormat [as file:] (node:internal/modules/esm/get_format:160:9)
at defaultGetFormat (node:internal/modules/esm/get_format:203:36)
at defaultLoad (node:internal/modules/esm/load:141:22)
at async ModuleLoader.load (node:internal/modules/esm/loader:409:7)
at async ModuleLoader.moduleProvider (node:internal/modules/esm/loader:291:45)
at async link (node:internal/modules/esm/module_job:76:21) {
code: 'ERR_UNKNOWN_FILE_EXTENSION'
}
「TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts"」
Test runnerでもTypescriptコードでユニットテストしたい
ts-node
$ node --require ts-node/register hoge.ts
TypeError: Unknown file extension ".ts" for /.../hoge.ts
at Object.getFileProtocolModuleFormat [as file:] (node:internal/modules/esm/get_format:160:9)
at defaultGetFormat (node:internal/modules/esm/get_format:203:36)
at defaultLoad (node:internal/modules/esm/load:141:22)
at async ModuleLoader.load (node:internal/modules/esm/loader:409:7)
at async ModuleLoader.moduleProvider (node:internal/modules/esm/loader:291:45)
at async link (node:internal/modules/esm/module_job:76:21) {
code: 'ERR_UNKNOWN_FILE_EXTENSION'
}
$ yarn add -D tsx
import assert from 'assert/strict';
import test from 'node:test';
test('1 is equal to 1.', () => {
assert.strictEqual(1, 1);
});
$ node --loader tsx hoge.spec.ts
node:internal/process/esm_loader:40
internalBinding('errors').triggerUncaughtException(
^
Error: tsx must be loaded with --import instead of --loader
The --loader flag was deprecated in Node v20.6.0 and v18.19.0
at z (file:///usr/src/app/node_modules/tsx/dist/esm/index.mjs:1:1773)
at Hooks.addCustomLoader (node:internal/modules/esm/hooks:203:24)
at Hooks.register (node:internal/modules/esm/hooks:169:16)
at async initializeHooks (node:internal/modules/esm/utils:233:5)
at async customizedModuleWorker (node:internal/modules/esm/worker:104:24)
--loader
--import
$ node --import tsx hoge.spec.ts
✔ 1 is equal to 1. (1.355371ms)
ℹ tests 1
ℹ suites 0
ℹ pass 1
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 13.941092
Mochaでもtsxをtsローダーとして使ってみる
$ mocha --import=tsx test/*.spec.ts
#...ユニットテストの内容は省略
1 passing (7ms)
Done in 2.46s.
まとめ
記事を書いた人
ナンデモ系エンジニア
主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。
カテゴリー