Jasmine 2.0 on Google Apps Script
jasmine2.0をnodeで動かす方法、ようやくとっかかりが掴めた。
jasmineの開発チームは、どこかのフォルダにspecファイルを置いといて、そのフォルダを指定してjasmine runnerを走らせるようにしてるみたい。そのコードを発見。
まずは、これをそのままGAS上で再試験できる状態を目指そうかと思う。
そしたら、GAS上でのjasmineの動作を信頼できるようになるし、その過程で基礎的なモジュールも増えるんじゃないかと。
rajahからUI部分を切り離して、consoleに移してしまって、rajah自体はnodeでもGASでも動く簡素な jasmine runnerにする。
そしたら、GASのアプリ作ったときも、node上でRajasとjasmineを使ってUnitテストして、GAS上でも同じテストができることに。・・・いいぞ。
フォルダ内のSprcファイルを探すのに、Jasmineの開発者のRunnerがFileSystemつかってた。そりゃそうか・・・。
Code.gsつくるとき、ユニットテストのためにmockfsつくったので、それをいじって、GAS上で動くようにする。Google driveを操作するのではなく、パックしたmodule filesを探したり読み込んだりできるように。あくまでRead only accessで。
Code Core modules
Node.js で、グローバルスコープに展開されるオブジェクトや基礎的なモジュール、そんなに多くなくてそこそこできそうなので、それをまとめてpackageにしてnpmに載せてしまいたい。`process` は、最低限のものだけ用意したやつがもうあるので、アレに少し足しておけばとりあえずはいいかと。
`Buffer` は、コンストラクタが存在してさえいればいいので、いまは空の関数を置いてある。GASでblobのラッパーとして実装してやったら何かいいことあるだろうか。
`console` は、あれでいけそうなので、GAS-Libraryとして外だし。で、GAS-Libraryいらないときもあるだろうから、ライブラリが存在しない時は、出口がLoggerになるようにしておく。このときは、console.errorだけを記録する仕様でもよいかも。
`fs`、前述のとおり。
Node Core modules
いまのところ動いていそうなもの。- util
- assert
そのうち試したいもの。
- event
processは、ほんとは event emitter のインスタンス。
いまはなんちゃって実装だけど。
GASにはnon-blockingな発想はないし、利用目的からしてそぐわないけど、思考実験としてどこまでできるものなのかちょっと興味あり。
おやすみなさい。
Comments
Post a Comment