2014-12-25 9 views
5

Ich versuche Generator Compose Szenario zu testen. In meinem Generator nenne ich einen Teilgenerator, wenn eine bestimmte AufforderungTesting Yeoman ComposeWith

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

true zurück, offensichtlich teste ich die Bar Teilgenerator getrennt. Allerdings hätte ich gerne eine Bestätigung dafür, dass composeWith() aufgerufen wurde. Und ich schätze, das Problem liegt eher in meinen Fähigkeiten als in den Testunterlagen, aber ich habe keine Ahnung, wie ich das machen soll. Ich verstehe, dass ich einen Spion und einen Stummel brauche. Aber die Dokumente listen nur die Funktionen auf und die Tests für den yeoman-Generator selbst sind nur mental (ich habe versucht, ihre Schritte zu reproduzieren, aber sie verwenden meistens Dummies für alles und ich muss nur den Sub-Generator ausstempeln).

Jede Hilfe würde wirklich geschätzt werden. Vielen Dank.

Antwort

5

Ich gebe zu, die Dokumentation fehlt in diesem Punkt, und wir könnten es verbessern.

Hier ist ein einfaches Beispiel, wie man einen Spion verwenden könnte Ihr Unter Generator genannt wird zu testen:

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

Ich hatte auch zu 'require (‚Mokka-sinon‘)' und 'sinon.spy ändern 'zu' this.sinon.spy', damit es funktioniert. Es gibt viele Möglichkeiten, 'sinon' in den Geltungsbereich zu bekommen, so dass OP anders aufgebaut sein kann. – maxwellb