Я пишу несколько тестов для приложения, которое использует RequireJS. Из-за того, как приложение работает, он ожидает получить некоторые классы через вызов require
. Итак, для тестирования у меня есть несколько фиктивных классов, но я не хочу, чтобы их помещать в отдельные файлы только для этого теста. Я бы предпочел, чтобы просто define()
их вручную внутри моего тестового файла следующим образом:Определение модулей и их использование немедленно с RequireJS
define('test/foo', function() {
return "foo";
});
define('test/bar', function() {
return "bar";
});
test("...", function() {
MyApp.load("test/foo"); // <-- internally, it calls require('test/foo')
});
Вопрос здесь заключается в том, что оценка этих модулей задерживается до тех пор, событие сценария OnLoad не срабатывает.
От require.js around line 1600:
//Always save off evaluating the def call until the script onload handler. //This allows multiple modules to be in a file without prematurely //tracing dependencies, and allows for anonymous module support, //where the module name is not known until the script onload event //occurs. If no context, use the global queue, and get it processed //in the onscript load callback. (context ? context.defQueue : globalDefQueue).push([name, deps, callback]);
Есть ли способ я могу вручную запустить очередь будет оцениваться?
Вы можете добавить более одного модуля на файл (следует учитывать при оптимизации + Минимизировать всю вашу заявку), вы просто должны дать каждому модулю определенное имя (см. первый аргумент строки каждой функции 'define' в OP). – nickf
Кроме того, модули предназначены только для тестирования, и они очень ** базовые. Немного сложнее, чем в приведенном выше примере, но не так много. Наличие каждого в собственном файле было бы слишком грязным. – nickf
уверен, я понимаю. но из того, что я могу сказать из документов, единственный случай, когда у вас есть один файл с несколькими модулями, после этапа оптимизации/сборки. честно говоря, я не знаком с requirejs, но я использовал его в нескольких проектах. документы довольно понятны: «На диске должно быть только одно определение модуля на диске. Модули могут быть сгруппированы в оптимизированные пакеты с помощью инструмента оптимизации. ' я бы начал там :) – keeganwatkins