2015-10-06 2 views
1

Я начинаю тестировать некоторые из моих модулей Dojo и dojo/domReady! вызывает проблемы. (В частности, в любой момент, когда мне нужен модуль с додзе/domReady! Где-то в его поддереве требований, Жасмин молча притворяется, что тест не существует.) Я требовал его в каждом модуле, который касается DOM, потому что я не думал, что это может навредить. Теперь мне интересно, нужно ли мне на самом деле позвонить, чтобы позвонить ему повсюду или если это действительно необходимо только на верхнем уровне.Должно ли большинство модулей Dojo требовать dojo/domReady?

В моем случае я пишу виджет для Web AppBuilder для Esri. У него есть одна точка входа Widget.js. Если мне требуется dojo/domReady! в Widget.js, могу ли я опустить его во всех моих других модулях? Лучше ли было бы переопределить domReady в модульных тестах, как то, о чем говорили в this answer?

+0

Думаю, я слишком скоро говорил о том, что domReady является проблемой. По-видимому! является виновником. Мои тесты не запускаются в любое время, когда я использую плагин (например, dojo/text! Something.html). Переопределение domReady.js не помогает. Я думаю, это может быть связано с этим: https://bugs.dojotoolkit.org/ticket/18123 Похоже, мне может пока что не повезло, если только ответ на мой фактический вопрос не будет «да». – donkey

+0

Еще одно обновление - я обнаружил, что если я использую [StubModule] (https://github.com/agrc/StubModule), чтобы вытащить модуль, который я тестирую, все магически работает. Я не могу это объяснить, но могу сказать, что я влюблен в StubModule! Я рад, что у меня есть обходной путь к моей текущей проблеме, но если у кого-то есть ответ на мой первоначальный вопрос, мне все еще очень интересно это слышать. – donkey

+0

Похоже, проблема, с которой вы сталкиваетесь, заключается в том, что вы используете тестовую систему, которая не понимает модули AMD и не поддерживает асинхронные операции, поэтому она не может ждать плагина DOM ready loader (или ANY loader плагин), чтобы завершить разрешение перед началом тестирования. Возможно, вам стоит пересмотреть с использованием Intern вместо этого, который поддерживает это из коробки, вместо того, чтобы использовать менее эффективную тестовую систему и получить больше проблем :) –

ответ

2

dojo/domReady! - это плагин для задержки загрузки модуля до загрузки DOM. Плагин domReady! привязывается к событию dom-ready браузера, который запускается, как только DOM готов. Однако это не означает, что все ваши виджеты проанализированы ... Вы можете добавить dojo/ready в зависимости от вашего модуля и заключить код своего модуля внутри ready(function(){ // your code }); в свой модуль, если вам нужно запустить код после того, как все виджеты были проанализированы.

Re: ваш вопрос о том, нужно ли вам использовать dojo/domReady! один раз для всех виджетов: вы обычно используете ready() один раз в корневом модуле модуля начальной загрузки, а затем все остальные зависимости загружаются и анализируются. Для тестового кода вы, вероятно, используете ready(), чтобы убедиться, что все виджеты проанализированы.

Что касается различия между dojo/domReady и dojo/domReady!, то загрузчик Dojo будет обрабатывать последний как плагин, а строка после ! принимается за аргумент для плагинов. В domReady случае плагин приводит к задержке загрузки модуля до тех пор, пока DOM не будет готова. Если вы не включите !, тогда загрузчик загрузит domReady в качестве утилиты и не будет рассматривать его как плагин. Для получения дополнительной информации о плагинах, посмотрите на here ...

+1 для получения последующих комментариев!

+0

Просто чтобы убедиться, что я понимаю, вы предлагаете использовать «domReady!» В точке входа и 'ready()' везде? Я удивлен, потому что это, похоже, противоречит документации dojo/ready (https://dojotoolkit.org/api/1.10/dojo/ready.html), в которой говорится: «В большинстве случаев необходимо, чтобы плагин domReady был достаточным и этот метод не нужен ». – donkey

+0

Нет, я не предлагаю использовать их одновременно. Один или другой «готовый» более подходит, если вам нужно подождать, пока все остальные виджеты не будут проанализированы. – stafamus

+0

Ах, я вижу. Наверное, я мог бы уйти с 'ready()' then, так как DOM будет создан каркасом, и мой виджет просто добавит к нему. Благодаря! – donkey

Смежные вопросы