次の大きな JS プロジェクトで RequireJS を使用しようと考えていますが、ヘッドレス テスト環境で RequireJS をテストする方法を理解するのに苦労しています。私は RequireJS とコーディングへのテスト駆動型アプローチの両方に慣れていないので、初心者に優しいものは何でも素晴らしいでしょう。
2 に答える
r.jsを使用してコマンドラインからRequireJSモジュールをテストし、Nodeでスクリプトを実行できます。
次に、 assertなどのNodeモジュールを使用して、自分用のテストスイートを作成できます。
非常に単純な例を次に示します。
scripts/simple.js
:
define({ name: 'Really simple module' });
tests/test_simple.js
:
require({ baseUrl: 'scripts' }, ['assert', 'simple'], function(assert, simple) {
var test = function(callback) {
var msg;
try {
callback();
} catch (e) {
msg = 'Failed: expected "' + e.expected +
'" but got "' + e.actual + '" instead.';
}
if (!msg) {
msg = 'Passed';
}
console.log(msg);
};
// This will pass
test(function() {
assert.equal(simple.name, 'Really simple module');
});
// This will fail
test(function() {
assert.equal(simple.name, 'Foo');
});
});
次に、プロジェクトの最上位ディレクトリからテストを実行できます。
node path/to/r.js test/test_simple.js
そして、あなたはおそらくそれよりもうまくいく可能性があります。アサーションモジュールは、自分自身をテストスイートにするために必要な最低限の要素です。自分で作成したくない場合は、CommonJS Test Runnerのようなパッケージを使用してみてください。ただし、最初にr.jsのドキュメントを読んでください。
わかりました、ここに私の考えがあります。サードパーティのコードではなく、独自のコードに対してのみテストを作成する必要があるため、ライブラリとしての RequireJS が正しく機能していることをテストする必要はありません。(信頼できる独自のテストがあります。)
したがって、テストでは、RequireJS が機能していると想定できるはずです。parseInt
あなたが動作し、setTimeout
動作し、動作すると仮定するのと同じようにMath.min
、それらの開発者には独自のテストがあり、それ以上書く必要はありません。
それが機能しない場合 (ほとんどありません)、または間違って使用している場合 (可能性はわずかに高い)、テストは壊滅的に失敗するはずです: たとえば、存在しないオブジェクトに対してメソッドを呼び出すことになります。
これを念頭に置いて、個々の RequireJS モジュールを単体テストする必要があります。これを行うには、各テスト フィクスチャをrequire
そのシステム アンダー テスト モジュールであるモジュールに含めるか、テストを非同期にし、それらの一部としてシステム アンダー テスト モジュールを含める必要がありrequire
ます。繰り返しになりますが、正しいモジュールが戻ってきたと仮定してください。そうでない場合、つまり RequireJS を誤用している場合、テストは壊滅的に失敗します。