【发布时间】:2012-04-04 17:58:55
【问题描述】:
我正在编写一个 Greasemonkey 用户脚本,它应该使用 jQuery 并在 Google Chrome 和 Firefox 上工作。
我已经看到了几个如何做到这一点的例子,包括关于 SO 的非常好的答案。所有这些都归结为调用一个“注入脚本”函数,传递另一个回调函数作为参数。
回调函数内部的代码是“神奇”发生的地方,包括访问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 问题,而不是特定于用户脚本或单元测试...也许您应该更改标题和您要问的问题以更能反映您的具体问题?
标签: jquery unit-testing google-chrome greasemonkey userscripts