2012-07-06 9 views
10

私はmochaテストスイートをループしようとしています(期待した結果を持つ無数の値に対して自分のシステムをテストしたい)が、動作させることはできません。たとえば:Loop Mochaテスト?

スペック/ example_spec.coffee:私はそれは次のようになりたい

three 
three 
three 

test_values = ["one", "two", "three"] 

for value in test_values 
    describe "TestSuite", -> 
    it "does some test", -> 
     console.log value 
     true.should.be.ok 

問題は私のコンソールログ出力は次のように見えることです。

one 
two 
three 

私のモカのためにこれらの値をループする方法エスト?

答えて

12

ここで問題となるのは、「値」変数をクローズすることです。そのため、最後の値が何であっても常に評価されます。

このような何かが働くだろう:

test_values = ["one", "two", "three"] 
for value in test_values 
    do (value) -> 
    describe "TestSuite", -> 
     it "does some test", -> 
     console.log value 
     true.should.be.ok 

これは、値は、この匿名関数に渡されたとき、それは外側の関数に新しい値パラメータにコピーされるために動作し、したがって、ループによって変更されません。

編集:coffeescript "do" nicenessを追加しました。

+1

私は、自分自身をla https://github.com/visionmedia/mocha/issues/420と考えました。ありがとう! – neezer

2

「データ駆動型」を使用できます。 https://github.com/fluentsoftware/data-driven

var data_driven = require('data-driven'); 
describe('Array', function() { 
    describe('#indexOf()', function(){ 
     data_driven([{value: 0},{value: 5},{value: -2}], function() { 
      it('should return -1 when the value is not present when searching for {value}', function(ctx){ 
       assert.equal(-1, [1,2,3].indexOf(ctx.value)); 
      }) 
     }) 
    }) 
}) 
関連する問題