npmだけでディレクトリを監視してテストを自動実行させる方法
一定のディレクトリを監視しつつ、変更があったらテストを実行するコマンドを勝手にやってくれるようなパターンをnpmだけでやるにはどうすればいいのか調べた所npm-watchっていうのがあるらしい
selenium-webdriverを使ってChrome Extensionのテスト
selenium-webdriverを使えばChrome Extensionの操作テストとか出来たりする模様なのでやってみた
supervisord (4) - eventlistener -
参考: http://blog.hakutoitoi.com/?p=396
supervisordで管理しているプロセスが落ちたりだとか(規定されている?)一定時間毎に何かコマンドを動かしたい時とかに使える模様
gulpでmocha-phantomjs+jscoverage
以前に「mocha-phantomjs+jscoverageでコードカバレッジ出力」な流れをgruntに移植するっていうのをやったのですが、それのgulp版
Androidでsocket.io
socket.io-java-clientを使えば出来るらしいのでちょっと要件検証目的でやってみた。ちなみにsocket.ioサーバーはnode.jsなやつを使う
mochaとchaiでJavaScriptをテスト
http://visionmedia.github.com/mocha
を使ってnode.jsでもbrowserでテストランナーなHTMLを読み込んでもテスト出来るテストフレームワークな感じ(正式的にはどういうスタンスなのか個人的に不明)。使ってみるとする
node.jsでdocument/window依存なスクリプトをグダる (2)
node-jqueryがwindowなグローバルがあればXMLHttpRequestをロードしてくれるっていう事実が発覚したのですが
それは置いといて、node vm contextな扱いとかでrunnerなJS作ってnode.jsでjQueryを扱うテストとか色々出来ないかなーっと模索しているのですが、とりあえずやってみた(但し、QUnitとか除外)
node.jsでdocument/window依存なスクリプトをグダる
例えばJavaScriptなUIコンポーネントというかなんかを書いて、それをテストする際にはQUnitだとか、操作エミュレーションではSelenium使ったりすると思うのですが。でnode.jsを使ってdocumentやwindowに依存するスクリプトを実行する場合どうするかって話。んまぁ要件により様々だとは思いますけど
でnode.jsのモジュールでjsdomっつーのがあって、それを利用してあーだらこーだらできねーかなーって思って色々やってみた
sodaを使ってみる
何やらNode.jsでSeleniumを使った検証が出来る模様な https://github.com/LearnBoost/soda っていうのがあるらしいので、ちょいと使ってみた
Node.jsのrequire.cache
Node.jsのrequireは読み込んだ後にその.jsファイルをキャッシュするような事は以前書いた。でこれ不都合な場合もある。それが「テストケース時にモジュールのprototypeを意図的に書き換えた場合にその後のテストケースにも影響する」っていうところがあるようで。
Node.jsのrequire
- requireで参照された場合に特定の処理を行わない
- nodeコマンドによるスクリプト実行だと通常どおり処理を行う
というもの。なぜこういうのが必要になったのかと言うと、単純に実行を行うスクリプトとそれに伴うオブジェクト定義等を行うスクリプト(module.exportsする)を分けてしまえば良いだけの話になるのだけど、それをする為だけにわざわざスクリプト別にするという明らかにめんどくさい事の必要性ってないよねって思う所。んで、そうすると「じゃあこれどうやって単体テストするの?」って話になるわけで。なので1と2で処理を分ける、つまりrequireをした時は特定の実行コンテキストに及ぶ処理は行わない、そうする事でオブジェクト定義側を単体テストで流し込む事が出来るでしょうと。じゃあそれNode.jsでどうやるのって話。ドキュメントにそれらしいのがある
http://nodejs.org/docs/v0.6.15/api/all.html#all_accessing_the_main_module
「require.main === module」とい式自体がnodeコマンドにより実行された場合はtrueで、逆にrequireを使って処理された場合はfalseになるっぽい。という感じでやれば良いらしい。という事でテスト的に書いてみると