TSのType, Interface, Classから秒でテストデータ作成するnpm-pkg公開(Rust製)
はじめまして🙋
タイトルの通りTypescriptのType
, Interface
, Class
から秒でテストデータ作成するツールを公開しました👏👏👏
boostestと言います🚀🚀🚀
boostestとは?
npmでインストールするコマンドです。
日本語のREADMEには利用方法の動画もあります✨✨
ざっくりいうと下記のようなツールでして...
- typescriptのtypeやinterface, classから瞬時にテストデータ作成できる📝
- typeやinterfaceはテストデータを部分的に上書き可能🏗️
- テストデータは実際のコードとして出力されるため、ユーザーのアセットになる💸
下記のようにインストールできます。
npm install boostest
boostest
を含む関数を書いて、Genericsとしてtype
, interface
やtypeof Class
を渡すと、任意の値を持った値を返す関数を自動作成してくれます📝
import {GetUserRes} form "...";
const testData = boostestGetUserRes<GetUserRes>();
上記のように記載したのちにnpx boostest [target file path]
とするとboostestGetUserRes
を自動出力します。
boostestいつ使うん?
主にモック作成時やテスト時にテストデータを作成してくれる用途をイメージしました🤔💭💭
例えば、下記のようなAPIのレスポンスtypeやinterfaceが定義されているとします。
OpenAPI generatorなどで自動生成されたものかもしれませんし、ご自身で定義したものかもしれません。
interface GetUser {
user:{
name: string,
age: number
// ...他のプロパティたくさん
}
}
interface GetUsers {
users: GetUser[];
}
export const getUsers = ():Promise<GetUsers> {
// req get users api
};
getUsers
を利用したコードだとgetUsersのモックが欲しくなります。
getUsers
の中で利用するAPIが完成していない時、一時的にレスポンス内容をハードコーディングしたくなるかもしれません😮💨
そのような時に下記のようにboostestで自動生成する関数を定義し、一部オーバーライドさせれば愚直にテストデータを用意する工程を省略できます。最後にnpx boostest
を行うだけです🚀🚀
const user1 = boostestGetUser<GetUser>({name: "tanaka"});
const user2 = boostestGetUser<GetUser>({name: "suzuki"});
const users = boostestGetUsers<GetUsers>({
users: [user1, user2]
});
またboostest
というワードが気に入らない方(長いっ!など)や、複数のファイルにboostest関数を定義して扱いたい方をイメージして設定ファイルを用意しました。
boostest.setting.json
{
"target_pattern": ["src/**/*.ts"],
"name": "boostest",
"out_file_name": "test_data",
"tsconfig": "./tsconfig.json"
}
-
target_pattern
- globで柔軟に対象ファイルを指定できます
-
name
- boostestを含む関数ではなく、nameで指定した関数を対象にします
-
out_file_name
- 出力されるファイルは対照ファイル名を元にし
[対象ファイル名]_boostest.ts
となりますが、指定すると[対象ファイル名]_[out_file_name].ts
になります
- 出力されるファイルは対照ファイル名を元にし
-
tsconfig
- boostestが
type
,interface
やclass
の定義元を探すときにtsconfigの設定を参考にできます。指定しているaliasを利用する際など、tsconfigの指定が必要です。
- boostestが
ご意見お待ちしております!
初めてNPMパッケージ公開しましたが、ツール作るのは大変ですね!!!
普段利用しているOSSには感謝しかありません。
また、TS/JSの記法は(ESM, commonjsあるし)種別が多く、網羅する大変さを思い知りました!!😱
これからもサポート範囲広げていきたい!のですが、もしご利用いただけてご意見、要望やバグ報告していただけるとかなりモチベになります。
雑談でもいいのでコメント等でお気軽にお声掛け頂けると嬉しいです🎉🎉
最後に
現在boostestはベータ版です。
基本的な機能は実装済みですが、node_modulesから提供されるコードはESMやCommonjsなど記法が混在しており完璧にカバーできておらず、boostestは基本的にESMのみ対応しています。
また、現時点ではテストデータ生成時の型種類のカバー率が完璧ではありません。(その際は引数に渡すことで基本的には上書きできます)
node_modulesのコード以外であれば、複雑なexport方法を行ってない限り問題なくご使用いただけると思います。 何か不具合や、ご希望の追加機能があればISSUEをお気軽に作成ください。
Discussion