- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我两次尝试将消息发布到 JSpec Google Group显然失败了,我在这里发帖。
我在使用 JSpec 时遇到了问题显然通过某种测试进入无限递归循环(如下)。有任何想法吗?我的代码有问题还是 JSpec?我正在通过 Ruby Gem 运行 JSpec 2.11.2。
错误是“RangeError:超出最大调用堆栈大小。” (Safari)和“内部错误:递归过多”(FF/Mac)。我可以使用 Firebug 控制台将项目添加到房间,没有任何错误。
要重现该问题,请使用“jspec init test”创建模板 jspec 项目。然后像这样编辑以下文件:
你的lib.core.js
var Game = {};
Game.item = function () {
var result = {
name : 'Undefined',
room : null
}
return result;
};
Game.room = function () {
var result = {
items : [],
addItem : function (name) {
var item = Game.item();
item.name = name;
item.room = this;
this.items.push(item);
return item;
}
};
return result;
};
spec.core.js
describe 'Room'
before_each
room = Game.room()
end
describe 'addItem()'
before_each
potion = room.addItem('Potion')
key = room.addItem('Key')
end
//this is fine
it 'should return two different items'
key.should_not.be potion
end
//InternalError: too much recursion
it 'should not give recursion error'
key.should.be potion
end
end
end
最佳答案
免责声明:我之前也没有听说过 JSpec(尽管如果您正在寻找一个,Jasmine 是一个不错的选择。
我唯一能想到的就是“be”函数是如何工作的。如果它沿着对象图向下移动以查找两个项目是否相等,那么它可能会遇到循环依赖问题:即您在每个项目中引用您的房间,而该项目又具有您的项目,而该项目又具有您的房间和等等等等。这最终成为一个无限循环,be 函数无法从该循环中有效地返回并淹没堆栈,从而引发您看到的错误。
类似这样的(虽然没有比较,也:没有测试或运行这段代码,将其作为伪代码来解释上面的段落):
function be(obj) {
for (var key in obj) {
if (typeof(obj[key]) === "object") {
be(obj[key]); // If you have circular dependencies, the recursion never ends
}
}
}
关于javascript - JSpec - 范围错误 : Maximum call stack size exceeded,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1814337/
来自 Ruby 社区,我正在寻找用于 Javascript/Node.js 的 BDD 测试框架。 我是 JSpec,我认为它是正确的选择,因为我在 Ruby 中使用了 RSpec。 但是在他们的 G
我两次尝试将消息发布到 JSpec Google Group显然失败了,我在这里发帖。 我在使用 JSpec 时遇到了问题显然通过某种测试进入无限递归循环(如下)。有任何想法吗?我的代码有问题还是 J
我正在寻找一个与 Rails 3.0 良好集成的 javascript 单元测试框架 谁有使用过上述框架的经验可以分享他们的经验吗? ** 更新:根据他们的 Github 存储库,JSpec 现已停产
我是一名优秀的程序员,十分优秀!