Как макетировать строковые функции в Javascript и 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/stackru довольно сложен, так как "javascript", "string", "split" и "mock" являются слишком общими поисковыми значениями.
Спасибо за вашу помощь!
1 ответ
На самом деле строковый литерал является независимым типом, он отличается от Object. В javascript вы можете назначить только значение ключа для объекта.
Когда вы вызываете 'string'.split, строка преобразуется в String Object сзади. Итак, ваше назначение бесполезно.
Если вы объявили свой код в строгом режиме, назначение приведет к вашей ошибке.
Вы можете изменить свой код следующим образом:
var name = new String('test_string');
name.split = function (limiter) {
ok(true, 'split called');
}