Zenn
Open2

Jestの %s などのプレースホルダーについて整理📝

まさぴょん🐱まさぴょん🐱

Jest でよく見る %s は、テスト名(あるいはテストの説明文)などに変数を埋め込むときに使う「文字列用プレースホルダ」です。

テストごとに変数の値を動的に名称へ差し込むことができるので、test.eachdescribe.each などのパラメータ付きテストを書くときによく利用されます。

%s の主な用途

1. テスト名への動的な文字列埋め込み

test.each([
  ['foo', 123],
  ['bar', 456],
])('文字列 %s を使って値をテストする(値:%i)', (str, num) => {
  // テストの実装
  expect(typeof str).toBe('string');
  expect(typeof num).toBe('number');
});

上記の例では、

  • %s は文字列 ('foo', 'bar') が埋め込まれる

  • %i は整数が埋め込まれる
    という形式です。テストが実行されると、実際には以下のような名前でテストが実行・表示されます。

  • 文字列 foo を使って値をテストする(値:123)

  • 文字列 bar を使って値をテストする(値:456)

注意点

  • %s文字列 用のプレースホルダです。数値やオブジェクトを出力したい場合は、%d(または %i)や %j など他の指定子を使う場合があります(後述)。
  • Jest のバージョンや Node.js のバージョンによってサポートしているプレースホルダの種類に若干の違いがある場合がありますが、基本的に Node.js の util.format 系のフォーマット指定子に準拠しています。

2. 似た用途・類似のフォーマット指定子

指定子 意味 備考
%s 文字列 (string)
%d, %i 整数 (integer) JavaScript では厳密には数値型 (number) を指す。%d%i も同様
%f 浮動小数点数 (float) JavaScript では同じく数値型 (number)
%j JSON 形式 (JSON) オブジェクトなどを JSON 文字列に変換して出力
%o オブジェクト (object) 簡易的なオブジェクトの表示
%O オブジェクト (object) より詳細なオブジェクトの表示
%p Pretty-print (Jest独自) Jest がオブジェクトをきれいに表示するときに使うことがある

※ これらの指定子は Jest 独自というよりは、Node.js やその周辺の util.format 系機能を踏襲している部分が大きいです。

3. Jest 特有の活用例

  • test.each / describe.each のパラメータ化されたテスト名で使用
    テストが複数パターンにわたる場合に、テスト内容をわかりやすく出力するために用いられます。
  • console.log などでも利用可能
    Node.js の console.log('値: %s', value); でも同様に文字列埋め込みできます。

比較・まとめ

  • Jest の %s文字列用 のプレースホルダ。
  • テストケースの名前や説明に、引数として渡した値を文字列として組み込むために使われる。
  • Node.js の util.format で使われるフォーマット指定子の一種なので、Jest 以外でも同様の構文が存在する。
  • %s の他、%i(または %d)や %j などの指定子がある。
まさぴょん🐱まさぴょん🐱

情報整理テーブル

用途・名称 概要 例(パラメータ化テスト) 備考
%s (文字列) 文字列を動的に埋め込み test('string is %s', (str) => {...}) Jest 以外にも Node.js の console.log 等で利用可
%i / %d (整数) 数値(整数)を動的に埋め込み test('number is %i', (num) => {...}) JavaScript では厳密には「数値型」なので実際には小数でも可
%f (浮動小数点数) 数値(浮動小数点数)を動的に埋め込み test('float is %f', (floatNum) => {...}) こちらも JS 内部では同じ数値型。ただし表記上は小数点を意識したい場合に使用
%j (JSON) JSON 文字列として埋め込み test('obj is %j', (obj) => {...}) オブジェクトを JSON 文字列に変換して出力
%o / %O (オブジェクト) オブジェクトの簡易 / 詳細表示 test('object is %o', (obj) => {...}) オブジェクトの構造を出力してデバッグしたいときに使用
%p (pretty-print) オブジェクトをきれいに表示(Jest 独自拡張) - Jest がテスト結果などを見やすく出力するための指定子
ログインするとコメントできます