Как я храню функции JavaScript в очереди для них, чтобы быть выполненным, в конечном счете [копируют]

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

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

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

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

72
задан Brian Webster 22 October 2012 в 18:35
поделиться

3 ответа

Все функции на самом деле являются переменными, поэтому на самом деле довольно легко сохранить все ваши функции в массиве (путем ссылки на них без () ):

// Create your functions, in a variety of manners...
// (The second method is preferable, but I show the first for reference.)
function fun1() { alert("Message 1"); };
var fun2 = function() { alert("Message 2"); };

// Create an array and append your functions to them
var funqueue = [];
funqueue.push(fun1);
funqueue.push(fun2);

// Remove and execute the first function on the queue
(funqueue.shift())();

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

// Function wrapping code.
// fn - reference to function.
// context - what you want "this" to be.
// params - array of parameters to pass to function.
var wrapFunction = function(fn, context, params) {
    return function() {
        fn.apply(context, params);
    };
}

Теперь, когда у нас есть служебная функция для упаковки, давайте посмотрим, как она используется для создания будущих вызовов функций:

183
ответ дан 24 November 2019 в 12:29
поделиться

Ссылка на сохраняемую функцию без символа () в конце. doSomething - это переменная (которая оказывается функцией); doSomething () - это инструкция для выполнения функции.

Позже, когда вы будете использовать очередь, вам понадобится что-то вроде (functionQueue.pop ()) () - то есть выполнить functionQueue.pop, а затем выполнить возвращаемое значение этого вызова для pop.

6
ответ дан 24 November 2019 в 12:29
поделиться

Вы также можете использовать метод .call () объекта функции.

function doSomething() {
    alert('doSomething');
}

var funcs = new Array();

funcs['doSomething'] = doSomething;

funcs['doSomething'].call();

Кроме того, вы также можете добавить функцию непосредственно в очередь:

funcs['somethingElse'] = function() {
    alert('somethingElse');
};

funcs['somethingElse'].call();
6
ответ дан 24 November 2019 в 12:29
поделиться
Другие вопросы по тегам:

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