2012-06-26 2 views
0

Может кто-нибудь дать мне несколько советов о том, как совместить bumblebee с requireJs? BumbleBee сочетает Rhino, JSpec, Envjs и Ant, чтобы предоставить «из коробки» набор инструментов для тестирования JavaScript. Его очень полезно для нас, потому что он делает простой автономный запуск в терминале на ubuntu-box.Как использовать requireJs с envjs

Весь наш JS-код, основанный на requireJs-Modules, и кажется, что требуемые модули не загружаются, если они требуются из spec-файлов из envjs/bumblebee/rhine (какой материал когда-либо может быть ответственен для этого), может быть связано с фактом асинхронности в requireJs.

Что я сделал:

  1. я создал Шмель-среду в соответствии с инструкциями по github-site упомянутым выше
  2. Команды «муравей примеров» работает отлично, и оба тестовые примеры успешно работает
  3. Я добавил require-jquery.js в зависимости (заменив jquery.js, который был изначально настроен) (этот путь следует за учебником "How to use jQuery with requireJS" - который успешно работает по всему нашему веб-приложению (и отлично работает)
  4. Я написал некоторые requireJS-модули, потребовал их в spec-файлах и обнаружил очень быстро, что они не будут загружены (будут загружены файлы спецификаций, а метод require будет выполнен, но не будет содержимое)
  5. тогда я играл с этими setup-hints для объединения requireJS с узлом (носорог упоминается здесь также)

Эти файлы могут быть интересны:

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» будет напечатан на консоль, код на основе требований никогда не будет выполнен здесь.

Tthen Я поместил детали define/require в spec-файлы из файлов примеров и обнаружил также, что я не могу использовать модули с требованием, потому что они не будут загружены и не будут нажаты.

Учитывая оригинальный Spec-файл из BambleBee-примеров:

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

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