Как макетировать строковые функции в 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');
}
Другие вопросы по тегам