私のプロジェクトは、Node、Coffeescript、SocketIO、Browserify、Mochaを使用しています。 (標準のサーバー側単体テストのモカ)
ヘッドレスブラウザを使用して、クライアント側のインターフェーステストを自動化したいと思います。 PhantomJSは理想的な選択肢のように見えました(Webソケットのサポートのためにゾンビよりも選ばれました)。
PhantomJSページは、私が理解しているテストランナーではないことを警告し、 mocha-phantomjs プロジェクトを使用してテストを実行することを推奨しています。
そのため、サンプルテストを実行することができました(例:mocha-phantomjs tests/mixed.html
)、しかし私の現在の問題は実際にテスト内でPHANTOMを使用することです。 mocha-phantomjsリポジトリのすべてのサンプルテストは、標準のmochaサーバー側単体テストを使用しているようです。
例えば簡単に実行できますmocha-phantomjs tests/mixed.html
退屈な古い単体テストを表示します。または、phantomjs tests/login.coffee
ログイン画面をロードするには...しかし、2つを組み合わせて、ログイン画面に表示されるはずの内容についてアサーションを作成するにはどうすればよいですか?
私はこれの例をウェブ上で見つけることができず、これを実行するための最良の方法を理解するのに苦労しています。
これがすべて理にかなっているといいのですが。助けてくれてありがとう。
[〜#〜] update [〜#〜]:著者による次の提案を見つけました( here )、しかし私はそれをどうするかを正確に理解していません:phantomjs lib/mocha-phantomjs.coffee test/mixed.html
MochaとPhantom.JSでテストするためのかなり素晴らしいチュートリアルがあります ここ 。
MochaとPhantomJSに関するセクションは短いですが、基本的な考え方は、DOMアサーションと相互作用をMochaテストスイートに入れ、testrunner.htmlファイルを介してクライアント側で実行し、mocha-phantomjsをtestrunnerに向けることです。 htmlファイル。
言い換えると、モカテストは次のようになります。
describe("DOM Test", function () {
var el = document.createElement("div");
el.id = "myDiv";
el.innerHTML = "Hello World!";
document.body.appendChild(el);
var myEl = document.getElementById('myDiv');
it("has the right text", function () {
(myEl.innerHTML).should.equal("Hello World!");
});
});
そして、testrunner.htmlファイルは通常の設定です:
<html>
<head>
<title> Tests </title>
<link rel="stylesheet" href="./node_modules/mocha/mocha.css" />
</head>
<body>
<div id="mocha"></div>
<script src="./node_modules/mocha/mocha.js"></script>
<script src="./node_modules/chai/chai.js"></script>
<script>
mocha.ui('bdd');
mocha.reporter('html');
var should = chai.should();
</script>
<script src="test/test.js"></script>
<script>
if (window.mochaPhantomJS) { mochaPhantomJS.run(); }
else { mocha.run(); }
</script>
</body>
</html>
Node.jsエコシステムから完全に実行されるソリューションを希望する場合は、 Zombie.JS を検討する価値があります。このスタックオーバーフロー question は、基本的な例を示しています。
トレードオフは、Zombie.JSはノードモジュールを要求するだけで使用でき、非常に高速ですが、「実際の」Webブラウザではないということです。 PhantomJSは、Webkitに基づいているため、より近いものです。また、mocha-phantomjsを使用した最初のアプローチでは、選択したさまざまなブラウザーでクライアント側のMochaテストを実行できます。PhantomJSはその1つにすぎません。