【Bun】Bun 1.0を軽く素振りしてみる(テストランナー編)
https://2.bp.blogspot.com/-wDIiY076K98/UZYlQfw21AI/AAAAAAAATL0/GmJEOLE1YsU/s800/test100.png
【前提】
Bunをテストランナーとして素振りしてみます。
【テストランナーとしての特徴】
Bunのランタイムで実行され、下記をサポートしています。
今回は簡単なテストコードを書いてテスト実行までの流れを把握してみます。
ライフサイクルフックやアサーションチェックも含め、ほぼJestと同様のシンタックスです。 テスト用のファイルの拡張子は以下をサポートしています。
*.test.{js|jsx|ts|tsx}
*_test.{js|jsx|ts|tsx}
*.spec.{js|jsx|ts|tsx}
*_spec.{js|jsx|ts|tsx}
簡単に、下記のようなテストを用意して実行してみます。
code:tascript.test.ts
import { expect, describe, test } from 'bun:test'
describe("about tascript" ,() => {
test("job is tascript", () => {
const name = 'tascript'
expect(name).toBe('tascript')
})
test("job is engineer", () => {
const job = 'engineer'
expect(job).toBe('engineer')
})
test("major is frontend", () => {
const major = 'frontend'
expect(major).toBe('frontend')
})
})
さて、実行してみます。
code:test.sh
$ bun test
bun test v1.0.0 (822a00c4)
test/index.test.ts:
✓ about tascript > job is tascript 0.03ms ✓ about tascript > job is engineer
✓ about tascript > major is frontend
3 pass
0 fail
3 expect() calls
Ran 3 tests across 1 files. 18.00ms 速すぎますって…18ms...
面白いなと思ったのがskipとonlyです。双方ともdescribeとtestの両方に適用できて、テスト実行時に応じてオプションを付与すると、テスト実行の対象を切り替えることができます。 onlyを使うと--onlyオプションを付与して実行すると対象のテストのみ実行します。例えばabout tascript > major is frontendのテストにonlyを付与して実行すると以下のようになります。
code:test.sh
$ bun test --only
bun test v1.0.0 (822a00c4)
test/index.test.ts:
✓ about tascript > major is frontend 0.02ms 1 pass
0 fail
1 expect() calls
Ran 1 tests across 1 files. 9.00ms skipを付与して実行すると対象のテストは実行しません。ちなみにonlyと併用すると実行しなかったテストは実行結果に表示されません。about tascript > major is frontendのテストにskipを付与して実行すると以下のようになります。
code:test.sh
$ bun test --skip
bun test v1.0.0 (822a00c4)
test/index.test.ts:
✓ about tascript > job is tascript 0.02ms ✓ about tascript > job is engineer
» about tascript > major is frontend
2 pass
1 skip
0 fail
2 expect() calls
Ran 3 tests across 1 files. 10.00ms onlyとskipを活用すれば、テストコードが長くなり、追加テストの実行のみを確認したい場合などに、対象以外のテストをコメントアウトしたり、削除する必要がないのでテストケースの多いテストコードなどでも簡単にテストができます。
【余談】
本当に軽くですが、ランタイム、パッケージマネージャー、バンドラー、テストランナーとしてのBunを素振りしてみました。
パッケージマネージャーはとにかく高速でパッケージをインストールできました。
バンドラーとしてはビルトインのローダーのお陰で設定がシンプルで、バンドルが高速でした。
テストランナーはJestに慣れ親しんだ方なら困るようなシンタックスやマッチャーがなさそうな上にテストの実行が高速でした。
とにかく全てが高速なBun、これからも期待大です。