因为IE8不支持trim(),所以我想有一个后备选项来使用正则表达式(我知道这里有很多例子),所以有这个
function trim(value) {
if (typeof value === 'string') {
if (String.prototype.trim) {
value = value.trim();
} else {
value = value.replace(/^\s+|\s+$/g, "");
}
}
return value;
}
我想要做的是为此编写单元测试,所以基本上将 String.prototype.trim
设置为 true
或 false
这样我就可以确保使用 native 和正则表达式选项
describe('trim', function() {
it('should use native trim if available', function(){
String.prototype.trim = true; // THIS DOES NOT WORK
var string = 'test string ';
expect(string.trim()).toEqual('test string');
});
});
我怎样才能做到这一点?
谢谢
最佳答案
在该示例中,您将 String.prototype.trim 重新分配给 bool 值。这意味着您不能再调用 string.trim()。
你可以通过将 String.prototype.trim 指定为 false 来检查你的 polyfill 是否有效,然后调用 trim(string)。
describe('trim', function() {
it('should use native trim if available', function(){
String.prototype.trim = false;
var string = 'test string ';
expect(trim(string)).toEqual('test string');
});
});
我对重新分配 String 的属性感到非常不舒服,因此您也可以将 ie8 trim 分成一个单独的函数,然后可以更轻松地测试它。
function ie8Trim(value) {
if (typeof value === 'string') {
return value.replace(/^\s+|\s+$/g, "")
}
return value
}
function trim(value) {
if (typeof value === 'string') {
if (String.prototype.trim) {
return value.trim();
} else {
return ie8Trim(value)
}
}
return value;
}
关于javascript - 原型(prototype)方法的 JS 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41762656/