我有一个复杂的 javascript 类,它有很多功能,如果在生产环境之外调用它们,其中许多会抛出异常。我需要在我的测试中将这个类的模拟实例传递给另一个类的构造函数,但是我不希望实际调用任何复杂的类函数。我想要做的是有一个假对象,它具有复杂类的所有功能和属性,但所有功能都只是什么都不做的茉莉花间谍。
基本上我希望能够做到
var fakeComplexClass = createFakeObject(ComplexClass);
var testInstanceOfSimpleClass = new SimpleClass( fakeComplexClass);
Run Code Online (Sandbox Code Playgroud)
并确保如果testInstanceOfSimpleClass调用任何fakeComplexClass函数,它们将成为间谍,因此不会使我的测试崩溃。
我可以做类似的事情
var fakeComplexClass = { function1() {};, function2() {}; ... }
Run Code Online (Sandbox Code Playgroud)
但是有很多函数,我有几个不同的复杂类需要测试,所以我需要一种简单的方法来基本上监视类中的每个函数。\
Jasmine 确实有 createSpyObj,但它要求您将函数数组传递给它。如果我碰巧从复杂类中添加或删除函数,我不想在我的测试中维护该数组,所以我想要一些可以监视那里的每个函数的东西。
提前致谢。
我正在开发一款 RTS 游戏,您可以在其中选择单位并右键单击以让它们移动到某个地方。您还可以通过右键单击来排列您希望单位前往的点列表。
在除 FF 之外的所有浏览器中,这都运行良好。
然而,在 Firefox 中,右键单击会触发上下文菜单(右键单击而不使用 shift 不会)。我正在处理 contextmenu 事件并调用 preventDefault 但当按住 shift 按钮时,这在 FF 中似乎没有任何作用。
有什么办法可以阻止 FF 中的这种行为?
我的游戏在这里:https : //mod.it/4plhXo3l 和第 36 行 RTSBoard.js 文件中的相关代码。
我通过document.write写入iframe,然后尝试覆盖同一iframe上的文档.在FF中,这可以正常工作.但是,在初始document.write的chrome代码中,即使我用第二个document.write覆盖它,它仍然存在.
看到这个小提琴:http://jsfiddle.net/meQcC/
如果您按照预期在FF中查看它,iframe是空白的,并且您实际上得到"函数onLoad未定义错误",因为在行中
doc.write("<html><head><script>;" +
"<\/script></head><body onload='onLoad()'></body></html>");
Run Code Online (Sandbox Code Playgroud)
显然没有定义onLoad函数.但是,如果你在chrome中查看相同的小提琴,iframe将显示一个黑色矩形,并且onLoad调用没有错误,它将调用先前定义的函数,就像它仍然存在一样!!!!
有没有办法清除chrome中的文档,以便我可以覆盖iframe的内容而不用旧代码以某种方式持久存在?这是chrome中的错误吗?
我的网页上有一个文件输入,允许用户上传图像.
我设置了一些内容,以便在选择图像时触发文件输入的更改事件,并向其显示其图像的预览.
有时一旦他们看到预览,他们就想在本地稍微调整图像(例如使用绘画来裁剪).然后,他们单击画图中的保存并单击文件输入并再次选择该文件.
问题在于,当他们再次选择文件时,即使图像数据已经改变,也不会触发输入的更改事件,并且如果他们尝试将文件上载到我的服务器,则使用旧的图像数据.
有没有办法检测用户何时实际选择文件,而不是发生文件输入更改事件,以便我可以很好地处理案例?
编辑:请注意,我可以在每次用户选择图像时删除并重新创建文件输入,但这意味着文件输入显示"没有选择文件"会使用户感到困惑.
我正在尝试使用一个传递函数的函数,并使用一组args调用它.例如:
function foo(func, args) {
return func(args);
}
Run Code Online (Sandbox Code Playgroud)
但是,我不知道args中可能有多少个元素,而func应该能够成为任意数量的args的任意函数.我该如何处理?
另外说我想存储传递给foo的函数,只有在之前没有调用它们时才调用它们.
我可以这样做:
var calledFuncs = [];
function foo(func, args) {
if(calledFuncs.indexOf(func) === -1) {
calledFuncs.push(func);
return func(args);
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢,我对JavaScript中的函数式编程有点新意.
我希望能够做类似的事情
foo.x = 7;
Run Code Online (Sandbox Code Playgroud)
然后执行某些操作使该属性只读,以便其他代码无法更改它。我想要
foo.x = 10; //should do nothing
Run Code Online (Sandbox Code Playgroud)
无论如何,在 JS 中什么都不做吗?
我正在将 html 作为字符串传递。我的目标是从具有所有适当节点的 html 创建一个新文档,以便我可以在我创建的文档上执行诸如调用 doc.getElementsByTagName 之类的操作,并使其按预期工作。我的代码的一个例子是here。
var doc = window.document.implementation.createDocument
('http://www.w3.org/1999/xhtml', 'html', null);
doc.getElementsByTagName('html')[0].innerHTML =
'<head><script>somejs</script>' +
'<script>var x = 5; var y = 2; var foo = x + y;</script>' +
'</head><body></body>';
var scripts = doc.getElementsByTagName('script');
console.log(scripts[0] + " code = " + scripts[0].innerHTML);
Run Code Online (Sandbox Code Playgroud)
我有以下问题:
所以我的问题是:
A. 我如何处理诸如 < 之类的字符,当我尝试在将 innerHTML 设置为 B 时使用它们时会出现 DOM 异常 11。如何使文档正确解析脚本标签并将它们的代码放入其 innerHTML …
我想做一个可以映射的字符串替换
catch the ball
Run Code Online (Sandbox Code Playgroud)
至
CAtCh the BAll
Run Code Online (Sandbox Code Playgroud)
什么是明确指定a-> A,b-> B和c-> C的正确语法?
我的应用程序读取dynamoDB流以查找对表的更改,而我目前正在获取最新的流,如下所示:
this.awsDB.describeTable({TableName: 'MatchDraft'}, function(err, data){
if(err){
console.log(err);
} else {
this.streamArn = data.Table.LatestStreamArn;
console.log(data, this.streamArn);
_readStream.apply(this);
}
}.bind(this));
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,表LatestStreamArn不会自行更新,而是每24小时过期一次,此时我的程序开始工作。我总是只使用“最新”分片迭代器类型,所以我不想保留所有更改的24小时记录,我只想能够使用分片迭代器来有效地检测表的更改并在更改时显示它们发生。
如何使我的应用程序自动以最有效的方式根据需要创建新的LatestStreamArn?该代码是用户网络浏览器中的所有客户端,所以我不想打开对UpdateTable API的权限,据我所知,这是更新流的唯一方法。
javascript ×8
cdata ×1
dom ×1
file-upload ×1
firefox ×1
html ×1
html5 ×1
innerhtml ×1
jasmine ×1
object ×1
regex ×1
right-click ×1
unit-testing ×1