Как вызвать $ (документ) .ready (функция () {}) в поблочном тестировании

Я фиксирую каждый раз, я сделан с задачей. Это обычно занимает 30 минут к 1 часу

5
задан Rob Hruska 5 December 2009 в 05:28
поделиться

5 ответов

Часть ответа на этот вопрос можно найти здесь .

Ниже приведен пример кода для ответа на этот вопрос, основанный на приведенном выше ответе:

myFunction();
$.readyList[1]();

Индекс предполагает, что в исходном файле есть только 1 функция document.ready. Индекс 0 относится к чему-то еще, что, по моему мнению, является информацией о браузере.

0
ответ дан 18 December 2019 в 10:45
поделиться

You know document.ready... works so just start with calling the functions within it. Ideally, if you just have an init function called by the ready function then you call one function, it does what you need, and you can continue with your tests.

5
ответ дан 18 December 2019 в 10:45
поделиться

Если это модульный тест, я предполагаю, что вы проверяете выходные данные функции при определенных входных данных?

Вот мое мнение:

Вам следует подготовиться к случаю, когда document.ready вызывается и случай, когда это не так.

Таким образом, ваш модульный тест должен запускать каждую функцию дважды - один раз для имитации вызова pre-ready и один для моделирования вызова post-ready. То есть у вас должен быть один прогон, когда все, что происходит в document.ready, ДЕЙСТВИТЕЛЬНО выполняется, и один прогон, когда он просто игнорируется (предположительно, который будет вызван позже в жизненном цикле).

РЕДАКТИРОВАТЬ: Просто перечитайте вопрос и поняли его немного больше. Вы можете просто переопределить $ (document) .ready, чтобы делать то, что вы хотите (это НЕ ожидание запуска события DOMLoaded, а немедленное выполнение функций). Этот фрагмент заменит функцию $ (document) .ready на функцию, которая делает именно это. Он должен запускаться перед любыми модульными тестами.

var postReady = true; // or false to ignore the function calls.
jQuery.fn.ready = function(fn)
{
    if(postReady && fn) fn();
}

Пример тестового примера:

<html><head><title>whatever</title>
    <script type="text/javascript" src="/JS/jquery-1.3.2.js"></script>

    <script type="text/javascript">
        var postReady = true; // or false to ignore the function calls.
        jQuery.fn.ready = function(fn)
        {
            alert("We stole ready!");
            if(postReady && fn) fn();
        }

        $(document).ready(function()
        {
            alert("The function is called.");
        });
    </script>
</head><body></body>
</html>
6
ответ дан 18 December 2019 в 10:45
поделиться

Вы можете слишком далеко зайти в модульное тестирование, в этом случае вам нужно спросить себя, что вы тестируете и почему. Функция JQuery document.ready работает и работает хорошо (вы знаете это, потому что она была протестирована многими людьми).

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

//So instead of this...
$(document).ready(function() {...});

//Do the following
$(document).ready(my_function);

Затем вы просто протестируете my_function и убедитесь, что она работает. Убедитесь, что вы тестируете функции в том порядке, в котором они будут загружаться, для точного теста.

5
ответ дан 18 December 2019 в 10:45
поделиться

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

Также (IMHO, я не совсем уверен) вы должны вызывать обработчики готовности даже после того, как было инициировано событие готовности страниц, потому что если вы «устанавливаете» обработчик ready (), если событие document.ready уже было запущено, jquery вызывает этот обработчик немедленно (так что он никогда не теряет это событие, даже если ваш код добавил обработчик слишком поздно, то есть после документа .ready все еще было сделано).

Не могли бы вы просто создать пользовательское событие my_on_read ()? Или что-то подобное?

Ну, в конце концов, позаботьтесь о событиях и обработчиках ready (), которые будут установлены после того, как document.ready () уже будет выполнен:)

0
ответ дан 18 December 2019 в 10:45
поделиться
Другие вопросы по тегам:

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