Тестирование JavaScript функционирует в анонимных функциях

Я сказал бы, что это, вероятно, больше не стоит того. Я время от времени использую его в качестве намного большего количества универсального потокового редактора, чем sed с ищущими включенными способностями, но если бы Вы являетесь опытными с Python, я не знаю задачу, которую Вы были бы в состоянии закончить, это намного быстрее для компенсации в течение времени должно было изучить awk.

следующая команда является, вероятно, единственной, для которой я использовал awk за прошлые два года (это производит чистку полуудаленных пакетов от моих систем Debian/Ubuntu):

$ dpkg -l|awk '/^rc/ {print $2}'|xargs sudo dpkg -P
8
задан Matthew Taylor 10 December 2009 в 13:46
поделиться

4 ответа

I think my answer for this is (like so many things) that I'm doing it wrong. What I've defined as a 'private' function is really something that needs to be tested. It was only private because I didn't want to expose it within a utilities api or something like that. But it could still be exposed through my application namespace.

So within the anonymous function that is executed on-dom-ready, I just attach my pre-defined functions as event handlers to the proper DOM hooks. The functions themselves, while not stored with my more open utilities functions, are still stored publicly within a package in my namespace associated with the DOM structure they are dealing with. This way I can get at them and test them appropriately.

1
ответ дан 5 December 2019 в 20:16
поделиться

Вы можете намеренно предоставить тестовую ловушку внешнему миру, например, так:

var val = function() {
   var myInnerfunction = function(input) {
      return input + ' I ADDED THIS';
   };
   /* START test hook */
   arguments.callee.__test_inner = myInnerFunction;
   /* END test hook */
   return myInnerfunction('test value');
}();

теперь, когда val был запущен хотя бы один раз, вы можете ссылаться на val .__ test_inner и вызовите его с помощью тестируемых входов.

Преимущества этого подхода: 1. вы выбираете, что подвергается воздействию, а что нет (также отрицательно, потому что вы должны ПОМНИТЬ об этом) 2. все, что вы получаете, - это ссылка на частный метод, поэтому вы не можете случайно изменить его, только используйте его и посмотрите, что он дает

Недостатки: 1. если частный член изменяет (или полагается на) состояние своей функции хоста / родителя, вам будет сложнее провести модульное тестирование вокруг этого, поскольку вы должны воссоздать или искусственно контролировать состояние хоста / родителя в то же время 2. Как уже упоминалось, эти хуки нужно добавлять вручную

Если вы действительно поумнели, вы могли бы заставить процесс сборки искать блоки комментариев, как указано выше, и удалять тестовые хуки при создании производственной сборки.

5
ответ дан 5 December 2019 в 20:16
поделиться

Модульное тестирование afaik не касается внутренней работы вещей, которые вы тестируете. Дело в том, что вы проверяете функциональность, то есть: он выполняет то, что должен делать, не то, он это делает. Таким образом, если он использует внутренний частный член, он не должен тестироваться ...

1
ответ дан 5 December 2019 в 20:16
поделиться

Вы можете протестировать наблюдаемое внешнее поведение. В этом простом случае вы вернули только значение внутренней функции, но в реальном примере вы можете объединить результат этой внутренней функции с чем-то еще. Вы должны тестировать эту комбинацию, а не прямые выходы частного метода.

Попытка протестировать частный метод затруднит изменение и рефакторинг вашего кода, даже если внешнее поведение сохраняется. Тем не менее, Мне нравится рассматривать модульные тесты не как подробные тесты вашего кода, а просто предоставлять пример API и его поведение в различных условиях. ;)

1
ответ дан 5 December 2019 в 20:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: