我正在尝试编写一些调用window.document的测试,我想自己模拟实际的调用,所以我可以运行它们无头。不能使用以下代码:
window = {"document": ""};
document = window.document;
document.cookie = "";
document.location = {"hostname": "test.myserver.com"}
我收到以下错误:
TypeError: Cannot set property window that has only a getter. in file:...
有没有人知道如何嘲笑这个?
我正在使用Jasmine和jasmine-maven-plugin,如果这有什么不同。
答案 0 :(得分:6)
如果您必须在浏览器中运行代码,则可以将整个代码包装在with
语句中:
with ({window: {}}) {
...
}
答案 1 :(得分:1)
如果您更改了代码以使用win Anywhere窗口,那该怎么办?然后,您可以在不测试时使用var win = window;
,在测试时使用var win = {"document": ""};
。
答案 2 :(得分:0)
如果您在基于浏览器的内容中执行此操作,则无法通过窗口进行编写。你可以使用自定义变量而不是窗口来进行测试吗?
答案 3 :(得分:0)
如果您可以将所有代码放入单个文件中(例如,使用调用“cat”的shell脚本),这可能有效:
window.realWindow = window;
(function(){
var window = {document: {something: "hi!"}};
var document = window.document;
///////////////////////////////////
// your code goes here, for example:
function test (foo) {
alert (document.something + " " + foo);
realWindow.document.title = foo;
}
test("from inside");
// to make the function "test" reachable from the outside
realWindow.global_test = test;
///////////////////////////////////
})();
global_test("from outside");
现在你的全局变量不是真正的全局变量,但是“窗口”可以在任何地方访问,并且将是你自己的版本。请注意,这将破坏一些构造,并且将使得“从外部”获取内容变得更加困难......但在许多情况下,它可能只是在不对代码进行更改的情况下工作。
编辑:添加如何从封闭功能块外部访问某些内容的示例