如何在 Javascript 和 qUnit 中模拟字符串函数
How to mock string functions in Javascript and qUnit
模拟对象的正常功能通常是这样工作的:
objToMock.funcToMock = function (param1, ...) {
equal(param1, 'expectedValue', 'param1 passed correctly');
}
如果我使用本机字符串函数尝试此操作,则会抛出错误:
var name = 'test_string';
name.split = function (limiter) {
ok(true, 'split called');
}
错误:
Source: TypeError: Cannot create property 'split' on string 'test_string'
内置字符串函数是否有阻塞机制?我认为字符串也是具有函数的对象。
访问 'test_string' 的原型不起作用,因为 'prototype' 未定义。
搜索 web/Whosebug 非常困难,因为 "javascript"、"string"、"split" 和 "mock" 是过于通用的搜索值。
感谢您的帮助!
其实字符串字面量是一个独立的类型,它不同于Object。在 javascript 中,您只能将键的值分配给对象。
当你调用'string'.split时,字符串会在后面转换为String Object。所以,你的赋值是没用的。
如果您在严格模式下声明您的代码,赋值将导致您的错误。
您可以这样更改您的代码:
var name = new String('test_string');
name.split = function (limiter) {
ok(true, 'split called');
}
模拟对象的正常功能通常是这样工作的:
objToMock.funcToMock = function (param1, ...) {
equal(param1, 'expectedValue', 'param1 passed correctly');
}
如果我使用本机字符串函数尝试此操作,则会抛出错误:
var name = 'test_string';
name.split = function (limiter) {
ok(true, 'split called');
}
错误:
Source: TypeError: Cannot create property 'split' on string 'test_string'
内置字符串函数是否有阻塞机制?我认为字符串也是具有函数的对象。 访问 'test_string' 的原型不起作用,因为 'prototype' 未定义。
搜索 web/Whosebug 非常困难,因为 "javascript"、"string"、"split" 和 "mock" 是过于通用的搜索值。
感谢您的帮助!
其实字符串字面量是一个独立的类型,它不同于Object。在 javascript 中,您只能将键的值分配给对象。
当你调用'string'.split时,字符串会在后面转换为String Object。所以,你的赋值是没用的。
如果您在严格模式下声明您的代码,赋值将导致您的错误。
您可以这样更改您的代码:
var name = new String('test_string');
name.split = function (limiter) {
ok(true, 'split called');
}