Как использовать requireJs с envjs
Кто-нибудь может дать мне несколько советов о том, как объединить шмеля с requireJs? BumbleBee объединяет Rhino, JSpec, Envjs и Ant для предоставления готового инструментария для тестирования JavaScript. Это очень полезно для нас, потому что делает возможным простой автономный запуск в терминале на Ubuntu-box.
Весь наш JS-код, основанный на requireJs-модулях, и кажется, что требуемые модули не загружаются, если они требуются из spec-файлов из envjs / bumblebee / rhine (какие вещи когда-либо могут за это отвечать) быть из-за факта асинхронности в requireJs.
Что я сделал:
- я установил BumbleBee-Environment, следуя инструкциям на сайте github, упомянутом выше
- Команда "ant examples" работает нормально, и оба теста успешно выполняются
- я добавил require-jquery.js к зависимостям (заменив jquery.js, который был изначально настроен) (таким образом, следует Учебное пособие "Как использовать jQuery с requireJS" - которое успешно работает во всем нашем веб-приложении (и работает нормально)
- я написал несколько requireJS-модулей, потребовал их в spec-файлах и очень быстро обнаружил, что они не будут загружены (spec-файлы будут загружены, а require-метод будет выполнен, но не в содержимом ins)
- затем я поиграл с этими подсказками по настройке для комбинирования requireJS с Node (здесь также упоминается rhino)
Эти файлы могут быть интересны:
lib / bumblebee.js (который я рассматривал как точку входа всего набора тестов):
load('dependencies/js/env.rhino.1.2.js');
window.location="examples/fixture/fixture.html";
load('dependencies/js/jspec/jspec.js');
load('dependencies/js/require-jquery.js');
var runSpec = function(spec) {
JSpec.exec(spec);
};
define(function(require) {
console.log("A1");
var dep = require('dependency');
//The value returned from the function is
//used as the module export visible to Node.
return function () {};
});
require(['dependency'], function(d){
console.log("A2");
} );
console.log("A3");
var specs = arguments;
jQuery.each(specs, function(index, spec) {
runSpec(spec);
});
JSpec
.run({ reporter: JSpec.reporters.Terminal, fixturePath: 'spec/fixtures' })
.report();
Только "A3" будет выводиться на консоль, код, основанный на требованиях, здесь никогда не будет выполняться.
Затем я поместил define / require-parts в spec-файлы из файлов примеров и также обнаружил, что не могу использовать модули с require, поскольку они не загружаются и не присутствуют.
Учитывая оригинальный spec-файл из BambleBee-examples:
describe('Greeter', function() {
load('examples/src/greeter.js');
it('greets people', function() {
expect(example.greeter().greet()).to(eql, 'Hello!');
});
});
Когда я сейчас использую специфичные для requireJS модули, они также не будут загружены:
describe('Greeter', function() {
load('examples/src/greeter.js');
require(['dependency'], function(d){
// do something with D...
console.log("This will **NEVER** be printed");
} );
console.log("This **WILL** be printed");
it('greets people', function() {
expect(example.greeter().greet()).to(eql, 'Hello!');
});
});
Вопрос:
Есть ли способ объединить Envjs с requireJS или EnvJS не подходит для нас? Большое спасибо за любые подсказки!
1 ответ
Это известная проблема. Вы можете обратиться к https://github.com/envjs/env-js/issues/7 чтобы получить подробное обсуждение между envjs и requirejs. Мое решение - использовать Phantomjs для запуска спецификаций жасмина с помощью CI, и вы можете найти образец проекта по адресу https://github.com/xiaocong/xiaocong.github.com/tree/master/examples/coffee-bbb-amd-backbone-rest-contacts