2016-07-05 30 views
0

Ich versuche, einen Generator mit der inDir() Hilfsmethode zu testen, um 2 verschiedene Testszenarien in 2 verschiedenen Verzeichnissen auszuführen und verwirrende Ergebnisse zu erhalten.Testing Yeoman Sub-Generator

Wenn der Generator das erste Mal ausgeführt wird, funktioniert alles wie erwartet. Es kopiert alle Dateien in mein Verzeichnis tmp1. Wenn der Generator vom zweiten describe-Block ausgeführt wird, sind die einzigen kopierten Dateien .yo-rc und Gruntfile.js.

Ich denke, das hat etwas mit meinem Test-Setup zu tun, denn wenn ich eine .skip auf die erste describe setzen, dann läuft der Generator korrekt in tmp2/.

Im folgenden Beispiel habe ich die gleiche Konfiguration für beide verwendet, um die Anzahl der Variablen zu reduzieren, aber in der Praxis würde jeder Generator eine andere Reihe von Aufforderungen erhalten.

Hier ist meine Testdatei:

let prompts = require('../fixtures/prompts.js'); 

describe('generator,', function() { 
    this.timeout(0); 

    let generator = require.resolve('../../app/index.js'); 

    beforeEach(function() { 
    let options = { 
     skipInstall: true, 
    } 

    this.generator = helpers.run(require.resolve('../../app/index.js')) 
     .withPrompts(prompts.default) 
     .withOptions(options) 
    }); 

    describe('in tmp1/', function() { 

    beforeEach(function(done) { 

     this.generator 
     .inDir(path.resolve(__dirname, '../../tmp1')) 
     .on('end', done); 
    }); 

    it('should copy the files', function(){ 
     assert.file('dummyfile.txt'); 
    }); 
    }); 

    describe('in tmp2/', function() { 
    beforeEach(function(done) { 
     this.generator 
     .inDir(path.resolve(__dirname, '../../tmp2')) 
     .on('end', done); 
    }); 

    it('should not be crazy', function() { 
     assert.file('dummyfile.txt'); 
    }); 
    }); 
}); 

Was dies verursachen könnte?

Hinweis:

Für Zusammenhang möchte ich das Szenario testen, der einen Teilgenerator in einem Ordner ausgeführt wird, die bereits ein Projekt von der Basisgenerator erstellt wurde, enthält, um sicherzustellen, dass es korrekt verwendet die bestehende Projektkonfigurationen Ich bin mir nicht sicher, ob das, was ich hier mache, der beste Weg ist, um das zu erreichen, aber ich dachte, dieses Problem könnte verwirrend genug sein, um seine eigene Frage zu rechtfertigen.

Antwort

1

inDir() reinigt das Verzeichnis.

Wenn Sie einige zu existieren benötigt, um Ihren zweiten Generator auszuführen, können Sie den Callback-Parameter inDir verwenden, um Dummy-Dateien zu erstellen und Ihre Assertions zu erstellen.

+0

Das versuche ich letztendlich hier: kopiere die Dateien von 'tmp1' nach' tmp2' mit 'inDir()'. Wenn ich jedoch den Generator aus dem zweiten 'describe'-Block laufe, läuft er nicht korrekt, auch wenn ich keine Dateien kopiere. In dem Beispiel sind beide Aufrufe von helpers.run() bis auf das Zielverzeichnis identisch, aber sie liefern keine identischen Ergebnisse. Ich bin besorgt, dass meine Tests nicht unabhängig voneinander sind, aber ich kann nicht herausfinden warum. – Deimyts