2016-07-05 13 views
0

私は、inDir()ヘルパーメソッドを使用して2つの異なるディレクトリで2つの異なるテストシナリオを実行し、混乱する結果を得るためにジェネレータをテストしようとしています。yeomanサブジェネレータのテスト

ジェネレータを初めて実行すると、すべて正常に動作します。すべてのファイルを私のtmp1ディレクトリにコピーします。

ただし、第2のdescribeブロックからジェネレータを実行すると、コピーされるファイルは.yo-rcGruntfile.jsです。

を最初のdescribeに置くと、tmp2/で正しく実行されるため、これは私のテストセットアップと関係があると思います。

次の例では、変数の数を減らすために同じ設定を使用しましたが、実際には、それぞれのジェネレータには異なるプロンプトが渡されます。これを引き起こしている可能性がありますどのような

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'); 
    }); 
    }); 
}); 

は、ここに私のテストファイルですか?

注:コンテキストについては

、私はそれが正しく、既存のを使用していることを確認するために、すでにベースジェネレータによって作成したプロジェクトを含むフォルダにサブジェネレータを実行するシナリオをテストしたいですプロジェクト構成。私がここでやっていることが達成するための最善の方法であるかどうかは分かりませんが、私はこの問題が独自の質問に値するほど紛らわしいと思っていました。

答えて

1

inDir()はディレクトリを消去します。

2番目のジェネレータを実行するためにいくつか存在する必要がある場合は、コールバックパラメータinDirを使用してダミーファイルを作成してアサーションを行うことができます。

+0

これは私が最終的にここでやろうとしていることです:ファイルを 'tmp1'から' tmp2'に 'inDir()'を使ってコピーしてください。しかし、2番目の 'describe'ブロックからジェネレータを実行すると、ファイルをコピーしていなくても正しく実行されません。この例では、helpers.run()の両方の呼び出しは、ターゲットディレクトリ以外は同一ですが、同じ結果が得られません。私のテストはお互いに独立していないのではないかと心配していますが、理由を理解することはできません。 – Deimyts

関連する問題