2016-04-21 51 views
0

嘲弄的对象正常功能通常是这样的:如何嘲笑的JavaScript字符串函数和qUnit

objToMock.funcToMock = function (param1, ...) { 
    equal(param1, 'expectedValue', 'param1 passed correctly'); 
} 

如果我尝试这与本地字符串函数,一个错误WIS抛出:

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'未定义。

由于“javascript”,“string”,“split”和“mock”是过于通用的搜索值,因此搜索web/stackoverflow非常困难。

感谢您的帮助!

+0

提示:'prototype'是在'constructor'定义,而不是在'instance'。并看看这个:var name = Object('test_string')' – Thomas

回答

0

实际上,字符串文字是一个独立的类型,它与Object不同。在JavaScript中,您只能为对象分配一个键值。

当你调用'string'.split时,字符串将被转换为后面的字符串对象。所以,你的分配是无用的。

如果您已经在严格模式下声明了您的代码,则该分配会导致您的错误。

你可以改变你的代码是这样的:

var name = new String('test_string'); 
name.split = function (limiter) { 
    ok(true, 'split called'); 
} 
+0

它可以在我的电脑上以任何方式工作。 –

+0

谢谢!它也适用于我。 有一个后续问题,因为单元测试检查的主要方法提供名称输入与“typeof”不能用于String对象。 “(typeof name ==='string'|| name instanceof String)”做了一个双重检查。 –

+0

但是,'new String('test_string')'和''test_string''会给你相同的字符串......这有什么帮助? – evolutionxbox