kinjouj.github.io

zombie.js

2013-01-28T00:00:00+00:00 JavaScript Node.js

※defunctじゃないよww

以前にsodaを使ってJavaScript UI Component?な所をシステムに結合した状態でテストするっていうのをやったんですが、sodaをやる前からzombie.jsっていうのがあるのは知ってたんですがやらず嫌いなのもどうもなっていう事で使ってみた。要件はまったく同じでJavaScriptなイベントが実行されるリンクをクリックしたりして検証してみたりしてみる

node.jsでdocument/window依存なスクリプトをグダる (2)

2013-01-14T00:00:00+00:00 JavaScript Node.js

node-jqueryがwindowなグローバルがあればXMLHttpRequestをロードしてくれるっていう事実が発覚したのですが

それは置いといて、node vm contextな扱いとかでrunnerなJS作ってnode.jsでjQueryを扱うテストとか色々出来ないかなーっと模索しているのですが、とりあえずやってみた(但し、QUnitとか除外)

node.jsでdocument/window依存なスクリプトをグダる

2013-01-13T00:00:00+00:00 JavaScript Node.js

例えばJavaScriptなUIコンポーネントというかなんかを書いて、それをテストする際にはQUnitだとか、操作エミュレーションではSelenium使ったりすると思うのですが。でnode.jsを使ってdocumentやwindowに依存するスクリプトを実行する場合どうするかって話。んまぁ要件により様々だとは思いますけど

でnode.jsのモジュールでjsdomっつーのがあって、それを利用してあーだらこーだらできねーかなーって思って色々やってみた

Node.jsのrequire.cache

2012-05-07T00:00:00+00:00 JavaScript Node.js

Node.jsのrequireは読み込んだ後にその.jsファイルをキャッシュするような事は以前書いた。でこれ不都合な場合もある。それが「テストケース時にモジュールのprototypeを意図的に書き換えた場合にその後のテストケースにも影響する」っていうところがあるようで。

Node.jsのrequire

2012-05-03T00:00:00+00:00 JavaScript Node.js

  • 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になるっぽい。という感じでやれば良いらしい。という事でテスト的に書いてみると