我正在编写一个关于Range对象的测试。我的代码类似于以下内容。
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
所以,问题是:我怎样才能在茉莉花中正常测试范围对象?
答案 0 :(得分:1)
您必须模拟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');
});