jQueryを使用し、Google ChromeとFirefoxで動作するGreasemonkeyユーザースクリプトを作成しています。ChromeのGreasemonkeyスクリプトを作成してユニットテストできるようにするにはどうすればよいですか?
私はこれを行う方法のいくつかの例を見てきました。そして、それらのすべては、パラメータとして別のコールバック関数を渡す「注入スクリプト」関数を呼び出すことに沸きます。
このコールバック関数内のコードは、jQuery
($
)オブジェクトへのアクセスを含む「魔法」が発生する場所です。
このソリューションは正常に動作します。しかし、それを使用しての結果の一つは、関数がコールバック関数は、その中から呼び出すことができません外を定義していることである。
function doSomethingImportantThatIWantToUnitTest(){ ... }
function with_jquery(callback) {
var script = document.createElement("script");
script.type = "text/javascript";
script.textContent = "(" + callback.toString() + ")(jQuery)";
document.body.appendChild(script);
};
with_jquery(function ($) {
doSomethingImportantThatIWantToUnitTest(); // <---- meh. Not defined!
});
だから、私は唯一の内部のコールバック関数定義された関数を使用することができます。しかし、これらの機能は、外部から呼び出すことはできません。特に、単体テストから呼び出すことはできません。たとえば、私にとっては非常に迷惑です。
Chrome用のGreasemonkeyスクリプトを作成してそれをユニットテストする方法はありますか?
コンテンツスクリプトとページの有効範囲の間に厳密な分離があります。あなたは単位テストを注入することから何を止めますか? –
単体テストやユーザスクリプトについて話しているが、問題の詳細がわかってから、特定のスコープの関数にアクセスできないという話があるので、あなたの質問はむしろ混乱します。関数とスコープの問題はJavaScriptの問題であり、userscriptsやunit-testingに特有ではありません...あなたはタイトルとあなたの特定の問題をより反映するように求めている質問に変更する必要がありますか? – Muhd