2016-05-21 18 views
1

私はJavaを使ってMochaとChaiを使ってユニットテストを書いて、ノード経由でテストを実行しています。 ノードを介してすべてのテストを実行し、実際のブラウザ/ HTMLページを必要としない場合は、私はそれを好むでしょう。
.jsファイルはRequireJsモジュールとして書かれていますが、私はいくつかの論理ユニットテスト(つまりDOMを操作しないテスト)を書く方法が不足していると思います。Javascript - DOM操作のテスト

私が今こだわっているのは、DOM操作を実行する関数をどのようにテストできますか?

私はパラメータとして操作するすべての要素を渡すように関数シグネチャを変更する必要がありますか? (これはおそらく悪いことではありませんが、多くの要素に取り組んでいれば、多くのパラメータが渡されます)。

また、AJAXレスポンスをサーバーにヒットせずにテストするにはどうすればよいですか? 私がしたいのは、AJAXの応答をシミュレートし、自分のコードがそれをどのように処理するかをテストすることです。例えば404応答を偽って何が起こるか見る。
私はSinonJについて聞いたことがありますが、まだそれに精通していません。
私のAJAX呼び出しにJQueryを使用している場合、希望の結果を得るために$ .ajaxをスタブする必要がありますか?

上記に基づいて、私はjsテストのフロントで見逃していることはありますか? 私が上に述べたように、意味がない、あるいは間違っているような気がしますか?

私はPhantomJsを見たことがありますが、どこに合っているかはわかりませんが、実行環境(これは統合テストに近いと思います)に対するテストに最適です。正しい仮定ですか?

答えて

1

DOM操作のテストに関しては、jsdomというモジュールをJavaScriptで実装されたヘッドレスブラウザとして使用できます。だからあなたはDOMを取得しますが、あなたのテストはまだNode.jsで実行され、高速です。欠点は、jsdomが他のブラウザから独立しているため、ブラウザ固有の奇妙さをテストできないことです。

AJAXコールのテストに関しては、確かにsinon.jsが非常に役に立ちます。あなたは$ .ajaxをスタブアウトすることができますが、レベルをより深くテストしたい場合は、ブラウザのXMLHttpRequestをスタブすることもできます(実際はjsdom)。私はこれについてのブログ投稿を書いています:http://nicolerauch.de/2015/12/20/lightweight-stubbing-of-ajax-requests-in-javascript.html(下部にmochaとnode.jsとjsdomを使って作業コードとテストでGithubリポジトリへのリンクがあります)