我怎么能测试这个函数是做它应该做的? 我正在使用Jasmine作为测试框架。
function () { //if IE, return version number
var ua = window.navigator.userAgent;
var msie = ua.indexOf('MSIE ');
var trident = ua.indexOf('Trident/');
if (msie > 0) { // IE 10 or older
return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
}
if (trident > 0) { // IE 11 (or newer)
var rv = ua.indexOf('rv:');
return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
}
// other browser
return false;
}
我不介意这个功能是否有效。我需要为它编写一个测试。这意味着如果你告诉我它有效,它对我没有帮助。
答案 0 :(得分:1)
您需要以某种方式模仿window.navigator.userAgent
。最简单的解决方案是引入一个包装器:
function () { //if IE, return version number
var ua = window.navigator.userAgent;
return realFunction(ua);
}
然后为realFunction
编写测试,通过在JavaScript控制台中执行window.navigator.userAgent
来传递可以从多个浏览器获得的值。
您也可以尝试为window.navigator.userAgent
分配一个值,然后调用原始函数,但我不能100%确定不同的浏览器如何响应此类操作(他们可能会忽略此类的赋值或抛出错误) 。这就是为什么我认为包装函数方法更清晰,更安全。
另一个选项就像Selenium,它可以从测试启动Web浏览器并远程控制它(打开页面,运行JavaScript)。
但这种方法很脆弱(特别是涉及IE时),设置速度慢且复杂(当你想测试的浏览器数量超过单个版本时)。