我正在开始一个新项目(Firefox附加组件),我想尝试使用行为驱动的开发。我特别喜欢Jasmine BDD库。但是,我找不到如何在Add-On SDK中使用Jasmine等框架的好方法。
一个问题是Jasmine需要在全局对象上指定setTimeout(和类似)函数,而Add-On SDK使用“timers”模块导出那些函数。但是,让我说我调整Jasmine来从“定时器”中获取这些对象(或者将定时器导出的方法添加到全局对象中)。
更大的问题是我不知道如何实际运行测试。有一个由SDK生成的测试目录,但是,没有窗口或文档对象可以让我看到输出(我真的很想看到奇特的HTML输出)。我想我可以创建一个修改页面的内容脚本,但后来我无法访问(测试)后台脚本。
你以前见过这个吗?有没有推荐的方法如何处理?
谢谢! 托马斯
答案 0 :(得分:0)
您可以使用Add-on SDK windows API打开一个新窗口来运行您的测试。您应该能够使用subscript loader加载Jasmine脚本,并将窗口和文档设置为您的任何内容想要在下标范围内:
var windows = require("windows").browserWindows;
windows.open({
url: "about:blank",
onOpen: function(window) {
var script;
var scriptLoader = Cc["@mozilla.org/moz/jssubscript-loader;1"].
getService(Ci.mozIJSSubScriptLoader);
scriptLoader.loadSubScript(subscriptSpec, script);
script["window"] = window;
script["document"] = window.document;
// ... run your tests here by calling script.someFunc() ...
}
});
更新:进一步的研究表明,browserWindows实际上是特殊的包装器,不允许您访问内容窗口。您可以尝试从hidden frame获取窗口/文档。这是我可以看到从特权代码访问HTML文档的唯一方法。