以下の内容はhttps://thinkami.hatenablog.com/entry/2025/07/20/124419より取得しました。


Bun 1.2.19から、test.eachやit.eachを使ったパラメタライズドテストにて、ラベルの中の変数展開が行われるようになった

Bun 1.2.19から、test.eachit.each を使ったパラメタライズドテストにて、ラベルの中の変数展開がサポートされるようになったので、メモ。

 
例えば、以下のようなテストコードがあるとします。

import { describe, it, expect } from 'bun:test'

describe('変数展開', () => {
  it.each([
    { coupon: { name: '1割引', discountRate: 0.1 }, expected: 90 },
    { coupon: { name: '3割引', discountRate: 0.3 }, expected: 70 }
  ])(
    '$coupon.name のクーポンを使ったときの割引後価格は $expected であること',
    ({coupon: {discountRate}, expected}) => {
      expect(100 * (1 - discountRate)).toBe(expected)
    }
  )
})

 
このとき、Bun 1.2.18 までは $coupon.name のクーポンを使ったときの割引後価格は $expected であること の部分では変数展開がされません。

% bun test
bun test v1.2.18 (0d4089ea)
...
✓ 変数展開 > $coupon.name のクーポンを使ったときの割引後価格は $expected であること [0.02ms]
✓ 変数展開 > $coupon.name のクーポンを使ったときの割引後価格は $expected であること

 
Jestではできていることから、Bunのテストランナーでもできるようになるといいなと思いながら、issueを眺めていました。
Implement $var interpolation in test.each · Issue #6306 · oven-sh/bun

そんな中、以下のプルリクが作成・マージされました。
support $variables in test.each by RiskyMH · Pull Request #21061 · oven-sh/bun

その後、1.2.19でリリースされました。
https://bun.sh/blog/bun-v1.2.19#variable-substitution-in-test-each

 
Bun 1.2.19で上記のテストコードを実行したところ、変数展開が行われました。 coupon.name のようなオブジェクトも展開されています。

% bun test
bun test v1.2.19 (aad3abea)
...
✓ 変数展開 > "1割引" のクーポンを使ったときの割引後価格は 90 であること
✓ 変数展開 > "3割引" のクーポンを使ったときの割引後価格は 70 であること

 
なお、変数にスペースがない場合、変数展開は行われません。例えば、以下のようなスペースのないテストコードを追加します。

describe('変数展開', () => {
  // ...
  describe('スペースなし', () => {
    it.each([
      { coupon: { name: '1割引', discountRate: 0.1 }, expected: 90 },
      { coupon: { name: '3割引', discountRate: 0.3 }, expected: 70 }
    ])(
      '$coupon.nameのクーポンを使ったときの割引後価格は $expectedであること',
      ({coupon: {discountRate}, expected}) => {
        expect(100 * (1 - discountRate)).toBe(expected)
      }
    )
  })
})

 
この場合は

% bun test
bun test v1.2.19 (aad3abea)

✓ 変数展開 > スペースなし > $coupon.name?クーポンを使ったときの割引後価格は $expected?あること [0.68ms]
✓ 変数展開 > スペースなし > $coupon.name?クーポンを使ったときの割引後価格は $expected?あること
✓ 変数展開 > "1割引" のクーポンを使ったときの割引後価格は 90 であること
✓ 変数展開 > "3割引" のクーポンを使ったときの割引後価格は 70 であること

のように、変数展開されず、 ? が付いています。

 
Bunでパラメタライズドテストを書きやすくなったので、とてもありがたいです。




以上の内容はhttps://thinkami.hatenablog.com/entry/2025/07/20/124419より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14