【GAS】Google Apps Scriptで作った自作関数に対してテストコードを書けるライブラリ「TestGAS」を作りました!

763 語
4 分
【GAS】Google Apps Scriptで作った自作関数に対してテストコードを書けるライブラリ「TestGAS」を作りました!

はじまり#

135ml avatar
135ml
一旦、あのツールが完成したから、今回はその紹介記事にするぜ・・・
リサちゃん avatar
リサちゃん
お、とうとうあのツールが完成したか・・・
135ml avatar
135ml
そうです。あの「TestGAS」を紹介させていただきまぁぁぁす!

そもそも、なぜ作ったか?#

テストコードを書いていれば、作った関数とかが何を返してくれる処理なのかが一発で分かって便利だし、関数の性能の担保にもなります。

しかし、Google Apps Scriptには、そのテストコードを走らせるようなテストツールがありません・・・。 Pythonで言うpytestとか、Node.jsで言うJestみたいなツールがないってことです。何か不便です。

PythonやNode.jsと同様に、Google Apps Scriptで書いたコードも何をしたらその関数が動くかをいちいち覚えてられないので、テストコードを記述したいのだが、それ用のツールが無くて書けないのが課題でした・・・。

そして、実際に作ったのが「TestGAS」#

そこで、Google Apps Scriptにテストコードを記述してその動作確認を行うためのツールを作りました。それが「TestGAS」というツールです。 このロゴが目印です。

例えば、こんなテストコードを打つとします。

// content of test_sample.gs
let tester = TestGAS.createExecutor();
function sample(x){
return x + 1;
}
class Test_sample{
test_sample_1(){
tester.assertEquals(sample(2), 4);
}
test_sample_2(){
tester.assertNotEquals(sample(2), 4);
}
}
function execute_Test_sample(){
let failureFuncs = tester.executeTestGas(Test_sample);
}

そして、execute_Test_sampleを実行すると、こんな結果が返ってきます。

[ 'test_sample_1', 'test_sample_2' ]
TestGAS starts: "Test_sample"
...... TestGAS terminated: "Test_sample".
====================================================== FAILURES ======================================================
______________________________________________ test_sample_1 ______________________________________________
AssertionError: Actual value is not equal to Expected value.
actual : 3
expected: 4
=================== 1 failed, 1 passed of all 2 tests in 0.01 seconds ===================

pytestライクに返ってきます。

Assertion以外で、普通にコードがミスってたら、Google Apps Script既存のエラーチェックに引っ掛かるので、そこのチェックも大丈夫です。

開発で苦労したこと#

初めてテストツールなるものを作ったから、色々と大変な部分があったが、その中でもかなり印象に残っているのは、thisのバインドとファクトリメソッドのところかな。 その2点は、それぞれ記事にしているので、みなさんもGASとかJavaScriptで何か作る時に参考にしてもらえればと思います。 ファクトリメソッドにしないと、外部のGASエディタから呼び出せないんですよね・・・。

thisのバインドに関する記事:

ファクトリメソッドに関する記事:

その他の作成物#

今回、ライブラリのリファレンスとか初めて書きました・・・。 そのために使ったのがGitHub Pagesで、Public Repositoryにすれば無料で利用できて、テーマとかもいじれるから、とても便利。 実際に作ったリファレンスのページがこちらになります。

リポジトリはここです。

landmaster135
/
TestGAS
Waiting for api.github.com...
00K
0K
0K
Waiting...

クラスとか関数の設計図はこんな感じになってます。

課題#

今回、最低限の機能は実装できたと思いますが、実はもう少し欲しい機能があります・・・。どうすればいいのか・・・。

  • 関数をモックする機能
  • 網羅率(カバレッジ)を表示する機能

おしまい#

135ml avatar
135ml
なんとか、公開できるレベルまで持ってこれて何よりです! 個人的には、とりあえずこれで自作した関数の仕様がテストコードとして書けるようになったから、かなり満足。
リサちゃん avatar
リサちゃん
コードの動きをいちいち確認する作業が省けるねえ!
135ml avatar
135ml
みなさんも使ってみたい場合は、このスクリプトIDを使って利用できると思うので、使ってみて下さい。
1CRjWWWYfjD7WzPl43RB1BiD7XDLJmR03eEpXr2LMh75yAq5qMlczOIfm

以上になります!

記事を共有

この記事が役に立ったなら、ぜひ他の人と共有してください!

【GAS】Google Apps Scriptで作った自作関数に対してテストコードを書けるライブラリ「TestGAS」を作りました!
https://endorphinbath.com/posts/gas-testgas-test-code-for-user-defined-functions/
著者
kinkinbeer135ml
公開日
2022-05-08
ライセンス
CC BY-NC-SA 4.0
関連記事 スマート
1
【GAS】クラスを作って外部ライブラリとして呼び出したい場合は、ファクトリメソッドを作ろう
Code Google Apps Scriptで、ライブラリ化したクラスメソッドを外部のライブラリから呼べなくなってしまっている場合に、「ファクトリメソッド」を使って解決するかもしれません。本記事の方法をお試し下さい。
2
【GAS】スクリプトプロパティがGUIで確認できないのでJSONに入れることにした
Code GASのエディタでスクリプトプロパティを編集出来なくなる事象を回避するために、プロパティの値をJSONで格納するように実装していく記事です。
3
【GAS】「Exception: Invalid argument: id」が出た時の対処方法
Code Google Apps Scriptで開発を行っている際に、たまに遭遇するエラー文です。シートとかファイルのオブジェクトに関係してきます。
4
【GAS】「承認が必要です:このプロジェクトがあなたのデータへのアクセス権限を必要としています。」の表示工程を省くようにするスコープ設定
Code GAS実行時のOAuth承認プロセスを省くために必要なappsscript.jsonのスコープ設定について紹介します。
5
【GAS】「We're sorry, a server error occurred while reading from storage. Error code NOT_FOUND.」というエラーメッセージが出てきた時。
Code Google Apps Scriptを使用した時に、「Error code NOT_FOUND」エラーに直面したときの体験談になります。
ランダム記事 ランダム
Profile Image of the Author
kinkinbeer135ml
SIerをやめて、プログラミングを勉強しています。※Amazonアソシエイトに参加しています。
お知らせ
私のブログへようこそ!これはサンプルのお知らせです。
音楽
カバー

音楽

再生中なし

0:00 0:00
歌詞なし
カテゴリ
タグ
サイト統計
記事
287
カテゴリー
8
タグ
93
総文字数
486,174
運用日数
0
最終活動
0 日前

目次