Rajahが動いたのでさっそくテスト

テスト対象

わたフク。の活動では、スプレッドシートでの管理表を多用していて、そのスプレッドシート間のデータ移動にGASを使っています。
そのため、多様な管理テーブルへ簡易にアクセスする手段が必要でした。

これまではGASのtutorialにあるライブラリに手を入れて使っていたのですが、初学のときに作ったもので出来がよくないのと、なにより遅いので、作り替えることにしました。

・・と、いうより。

このライブラリを作りかえたいのに、テストを書けなければ怖くて触れない、というのが Rajah をつくったそもそもの動機です。

というわけで、さっそく Rajah で Jasmine を走らせて Table.js ライブラリをテストしてみました。

はじめてのおつかいならぬ、はじめての Jasmine、です。
以下、わかったことのメモを。

Jasmine

beforeEach と it との間でのオブジェクトの受け渡し

Spreadsheetの特定領域をテーブルとして読み込むライブラリなので、テストにあたっても、テスト環境用にシートを用意してあります。
ひとつのスプレッドシートに、何種類かのシートを作成して、これを使います。

このスプレッドシートをオープンしたりシートを開いたりというのはSpec実行毎に必要なので、`beforeEach`のなかで行っています。
そうすることで、Specの中では仕様に関することに集中できます。

ここで。beforeEachのなかに、以下のようなコードを書きます。
````js
    this.ss = SpreadsheetApp.openById( spreadsheetId );
    this.sheet = this.ss.getSheetByName( "1.simpleTable" );
````

開いたシート、ssオブジェクトやsheetオブジェクトをどこに置いてSpec本体にわたしたらいいんでしょう。
各Specで実行コンテキスト自体は共有されていますので、Globalに置くとそのまま次のSpec実行へゴミとして残ってしまいます。

上記では、thisに置いています。
jasmineのコードを眺めていたときに、なんらかのオブジェクトをapplyにわたしてSpec関数を呼び出していたので、ここはSpec毎にすべてのbeforeEachやafterEachで共有されていそうだな、と思ったためです。

さっきちらっとみてみたら、それはそれであってはいるのですが、かといってこのthisはサンドボックスのように使える場所でもなく、jasmineが使うSpecデータなどが置いてある場所でした。壊したら大変・・・。

thisにサンドボックスを割り当ててSpecを呼び出してくれたらよさそうなものですが。。
どうなんでしょうね。ちゃんと自分でmockをつくれ、ということでしょうか。

expect().toThrow() の書き方で注意


toThrowとnot.toThrow両方書かないと。
正常系でも投げる可能性あり。Spec codeがね。


Rajah

フィルターが欲しい

先に仕様を書くので、コーディングの最中はエラーだらけです。
それで、コーディング中の特定の仕様だけをなんども実行したいのですが、いまはまだフィルターがないので、全数実行。

止めたいときには、describeをxdescribeに、itをxitにと、'x'を付記すればよいのですが、これも面倒。
やっぱり、「ビジュアルレポーター兼フィルター」が欲しいです。

それで、デバッグの際にはRajahのWeb画面ではなくデバッガから executeJasmine() で実行するので、このときにもフィルター設定を参照するようになっていて欲しい・・・。
プロジェクトプロパティを参照するようにすればできそうな気がします。



Comments