2012-01-16 14 views
9

Я пишу несколько тестов для приложения, которое использует 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]); 

Есть ли способ я могу вручную запустить очередь будет оцениваться?

ответ

0

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

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

надеюсь, что это поможет! веселит.

+0

Вы можете добавить более одного модуля на файл (следует учитывать при оптимизации + Минимизировать всю вашу заявку), вы просто должны дать каждому модулю определенное имя (см. первый аргумент строки каждой функции 'define' в OP). – nickf

+0

Кроме того, модули предназначены только для тестирования, и они очень ** базовые. Немного сложнее, чем в приведенном выше примере, но не так много. Наличие каждого в собственном файле было бы слишком грязным. – nickf

+0

уверен, я понимаю. но из того, что я могу сказать из документов, единственный случай, когда у вас есть один файл с несколькими модулями, после этапа оптимизации/сборки. честно говоря, я не знаком с requirejs, но я использовал его в нескольких проектах. документы довольно понятны: «На диске должно быть только одно определение модуля на диске. Модули могут быть сгруппированы в оптимизированные пакеты с помощью инструмента оптимизации. ' я бы начал там :) – keeganwatkins

1

Лучшее, что я нашел до сих пор является асинхронно требуют модулей:

define("test/foo", function() { ... }); 
define("test/bar", function() { ... }); 

require(["test/foo"], function() { 
    var foo = require('test/foo'), 
     bar = require('test/bar'); 
    // continue with the tests.. 
}); 

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

  • Нет связанных вопросов^_^