Определение модулей и немедленное их использование с RequireJS - PullRequest
9 голосов
/ 16 января 2012

Я пишу несколько тестов для приложения, которое использует RequireJS. Из-за того, как приложение работает, оно ожидает получить некоторые классы с помощью вызова require. Итак, для тестирования у меня есть несколько фиктивных классов, но я не хочу помещать их в отдельные файлы только для этого теста. Я бы предпочел просто define() добавить их вручную в мой тестовый файл, например:

define('test/foo', function () {
    return "foo";
});

define('test/bar', function () {
    return "bar";
});

test("...", function () {
    MyApp.load("test/foo"); // <-- internally, it calls require('test/foo')
});

Проблема в том, что оценка этих модулей откладывается до тех пор, пока не будет запущено событие загрузки скрипта.

С require.js вокруг строки 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]);

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

Ответы [ 2 ]

1 голос
/ 16 января 2012

Лучшее, что я нашел на данный момент, - это асинхронное использование модулей:

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..
});
0 голосов
/ 16 января 2012

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

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

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

...