4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

最先端の開発手法?UDDを加速させるライブラリをつくってみた!

4
Posted at

......UDDって何? :thinking:

UDD、それはマグロ氏が提唱する革命的な開発手法である。
詳細は↓こちらの資料を参照されたし。

UDDやりたくなったよね? :wink:

UDDはひとりでもできるし、今からでもはじめられる。
というか楽しいのでやるべき。

でも......

ひとりでやるより、だれかとやったほうが楽しそうだよね。
テストの苦楽をともにする仲間が欲しいよね。わかる。

よし、ライブラリつくろう! :rolling_eyes:

そんなこんなで、私はいつのまにかUDD用のライブラリの開発していたのだった。
もちろん、UDDで。

やりたいこと

コンソール君と一緒にUDD!
つまり、テスト結果に応じて、「それでも!」or「ユニコーン!」をコンソールに表示したい!

技術選定

今回は、先の資料に準じて、Vitestを使用する想定でライブラリを作成していきます。

実装を簡単に説明

VitestではReportersを使うことで、テスト結果の出力をカスタマイズすることができます。(カスタムReporterを作成する手順はこちら)
今回のカスタムReporterは、onTestRunEndonFinishedのフック2つだけの実装。
onTestRunEndはすべてのテストが終了したあとに呼び出されるフックで、テストの最終結果が取得できます。この結果によって、コンソールに表示するメッセージ(「それでも!」or「ユニコーン!」)を用意しておきましょう。
※このときコンソールに出力してしまうとテスト結果より前にメッセージが表示されてしまうので注意
onFinishedフックは処理の終わりに呼び出されるフックなので、用意しておいたメッセージは、最終のこのタイミングで出力します。
useBannerオプションは、メッセージをバナー形式で表示する/しないが選択できるオプションです(要らなかったかも)。

export default class VitestUddReporter implements Reporter {
	useBanner: boolean;
	message: string;

	constructor(options?: VitestUddReporterOptions) {
		this.useBanner = options?.useBanner ?? true;
		this.message = "";
	}

	async onTestRunEnd(
		_testModules: ReadonlyArray<TestModule>,
		_unhandledErrors: ReadonlyArray<SerializedError>,
		reason: TestRunEndReason,
	) {
		this.message = getMessage(reason, this.useBanner);
	}

	async onFinished(_files: File[], _errors: unknown[], _coverage?: unknown) {
		try {
			console.log(this.message);
		} finally {
			this.message = "";
		}
	}
}

あとはnpmパッケージにして...

完成!!!!

不合格のときは...
image.png
合格のときは...
image.png
やったーーーー

これであなたのUDDも盛り上がること間違いなし! :unicorn:

今回はVitestでしたが、Jest等でも同じことはできます(たぶん)。
お好きなテストフレームワークでUDD拡張をつくってみてください。
もちろんUDDで。

今回作成したライブラリはこちら :robot:

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?