私はuserscriptを持っています(うまくいけばブラウザ間で互換性がありますが、今はTampermonkeyで実行しています)、私はテストスイートを設定しようとしています。 または、テストスイートを作成する際に取ったアプローチが妥当かどうか、それを別の方法で行うべきかどうかを試してみてください。shでユーザスクリプトをテストする
userscriptはかなり簡単です:たくさんの関数を定義し、そのうちの1つを呼び出して作業します。 <a href="https://nodejs.org/">node</a>
でチェックするには、関数を定義したいが、(DOMプロパティを扱うためのブラウザがないので)初期関数の実行を避けたい。だから私は(うまくいけば、かなりの互換性;私はdash
上でそれを実行している)この醜いシェルスクリプトを実行します。
#!/bin/dash
grep -ev '^\s*stuff\s*\(\s*\)\s*;?\s*($|//)' oeis-tools.user.js > test-cat.js
./getFunctions.sh >> test-cat.js
cat test.js >> test-cat.js
nodejs test-cat.js
rm test-cat.js
をだから、基本的に私は、テストスクリプトとcat
それを、それを渡し、関数が呼び出された行をドロップノードへ。 テストスクリプトの中で、私は私が形shouldBe(functionToTest, [firstInput, secondInput, etc], [correctOutput, otherCorrectOutput])
でテストを呼び出すことができますアサートに似た機能
function shouldBe(func, args, desiredResults) {
totalTests++;
tested.push(func.name);
var actualResult = func.apply(null, args);
if (isIn(actualResult, desiredResults)) return;
console.log('Called ' + func.name + '(' + args.map(disp).join(', ') + ')');
if (desiredResults.length === 1) {
console.log('\tExpected ' + disp(desiredResults[0]));
} else {
console.log('\tExpected ' + desiredResults.map(disp).join(' or '));
}
console.log('\tGot ' + disp(actualResult));
failedTests++;
}
を持っています。 (私はさまざまなヘルパー関数の定義を省略しましたが、その正確な定義はここでは重要ではありません)
プラスの面では、これによりテストを素早く書いて、手書きのまま手書きで書くことができます。しかし、それはかなりハッキーのようです。より良いアプローチがありますか?
あなたはDOMプロパティとはどういう意味ですか?このスクリプトを使用して呼び出しを取り除いている関数にコードを投稿できますか?要求しているDOMプロパティをシミュレーションまたはシムする方法があります。 – TheHansinator
@ Compynerd255:長いページの一種で、基本ページはタグスープです。実際これは重要な点です。サイトはすぐに再設計される予定で、DOM関連のコードをすべて書き直す必要があります。しかし、私はその部分のエラーについてあまり心配していません。エラーの大半は、DOM関連のコードから分離した興味深い部分で発生します(実際は、より多くのエラーが発生します。テストしますが、これは便利な副作用です)。 – Charles
@ Compynerd255:あなたが本当に好きなのは、ファイル(約1000行)をペーストビンなどにダンプすることができますが、巨大なコードを見て、デバッグを依頼している人たちを恐れたくはありませんそれ。 :) – Charles