2014-12-25 6 views
5

Я пытаюсь протестировать сценарий создания генератора. В моем генераторе я вызываю подгенератор, если какое-то подсказку возвращает trueTesting yeoman's compose With

if(this.bar){ 
    this.composeWith('foo:bar', {}); 
} 

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

Любая помощь была бы действительно оценена. Спасибо.

ответ

5

Я признаю, что документации по этому вопросу не хватает, и мы могли бы улучшить его.

Вот простой пример того, как вы могли бы использовать шпион, чтобы проверить ваш суб-генератор называется:

var generators = require('yeoman-generator').generators; 
var assert = require('yeoman-generator').assert; 

before(function (done) { 
    this.spy = sinon.spy(); 
    var Dummy = generators.Base.extend({ 
     exec: this.spy 
    }); 

    helpers.run('your/generator') 
     .withGenerators([ 
      [Dummy, 'foo:bar'] 
     ]) 
     .on('end', done); 
}); 

// Then in your assertions 
it('run the sub-generator', function() { 
    assert(this.spy.calledOnce); 
}); 
+1

Я также должен был 'требовать («Мокко-Sinon»)' и 'изменить sinon.spy 'to' this.sinon.spy', чтобы он работал. Существует множество способов получить «синус» в области видимости, поэтому OP может иметь другую настройку. – maxwellb