我正在写一个关于靶场物体的测试。我的代码类似于下面的代码。
Test = function () {};
Test.prototype.test = function () {
if (window.getSelection) {
var sel = window.getSelection();
var range = sel.getRangeAt(0);
// then some code;
} else if (document.selection) {
range = document.selection.createRange();
//then some code;
return 'haha';
}
it('should create range object', function () {
var myTest, result;
myTest = new Test();
spyOn(myTest, 'test').andReturn('haha');
result = myTest.test();
expect(result).toEqual('haha');
});当我运行测试时,它会抛出一个错误:INDEX_SIZE_ERR: INDEX_SIZE_ERR: DOM Exception 1
但是我的代码在浏览器中运行得很好。
然后我发现了一些关于getRangeAt和rangeCount的东西。
在用户单击新加载的页面之前,rangeCount为0。
然后我尝试添加像$(document).click();这样的代码,rangeCount仍然是0.
它仍然抛出INDEX_SIZE_ERR: INDEX_SIZE_ERR: DOM Exception 1
因此,问题是:我通常如何测试茉莉花中的范围对象?
发布于 2013-08-31 14:21:52
您必须模拟window.getSelection或document.selection.createRange,这样才不会调用原始方法。
it('should create range object', function () {
var myTest, result;
myTest = new Test();
//mock the select function so that it will return "haha" when getRangeAt is called
var range = 'haha';
var rangeObject = {
getRangeAt: function(){return range}
};
spyOn(window, 'getSelection').andReturn(rangeObject)
spyOn(myTest, 'test').andReturn('haha');
result = myTest.test();
expect(result).toEqual('haha');
});https://stackoverflow.com/questions/18544384
复制相似问题