При попытке протестировать существующий код, что Вы отказываетесь или неспособны измениться, отражение является хорошим выбором.
, Если бы дизайн класса все еще гибок, и у Вас есть сложный закрытый метод, который требуется протестировать отдельно, я предлагаю, чтобы Вы вытащили его в отдельный класс и протестировали тот класс отдельно. Это не должно изменять открытый интерфейс исходного класса; это может внутренне создать экземпляр класса помощника и назвать вспомогательный метод.
, Если Вы хотите протестировать трудные состояния ошибки, прибывающие из вспомогательного метода, можно пойти шаг вперед. Извлеките интерфейс из класса помощника, добавьте общедоступного метода get и метод set к исходному классу, чтобы ввести класс помощника (используемый через его интерфейс), и затем ввести ложную версию класса помощника в исходный класс, чтобы протестировать, как исходный класс отвечает на исключения от помощника. Этот подход также полезен, если Вы хотите протестировать исходный класс, также не тестируя класс помощника.
error.fileName
сообщит вам файл, из которого взят сценарий (не уверен, что он работает в каждом браузере; я тестировал его в Firefox и Opera)
var filename = (new Error).fileName;
Этот метод следует использовать только в том случае, если переменные определяют какой код JavaScript был загружен (например, при обработке запроса PHP, динамически создавая файл JS).
Если вы хотите передать информацию в код JavaScript, используйте функции или переменные в коде после его загрузки.
Ага. Дополнительный бонус: я конвертирую параметры строки запроса в более удобный хеш javascript.
HTML:
<script src="script.js?var1=something&var2=somethingelse" type="text/javascript"></script>
script.js
:
var scriptSource = (function() {
var scripts = document.getElementsByTagName('script');
return scripts[scripts.length - 1].src
}());
var params = parseQueryString(scriptSource.split('?')[1]);
params.var1; // 'something'
params.var2; // 'somethingelse'
// Utility function to convert "a=b&c=d" into { a:'b', c:'d' }
function parseQueryString(queryString) {
var params = {};
if (queryString) {
var keyValues = queryString.split('&');
for (var i=0; i < keyValues.length; i++) {
var pair = keyValues[i].split('=');
params[pair[0]] = pair[1];
}
}
return params;
}
Чтобы сделать что-то подобное, вам нужно будет использовать серверный язык для рендеринга JS.
Я бы не рекомендовал это.