12

モカ テスト スイートをループしようとしています (期待される結果が得られる無数の値に対してシステムをテストしたい) が、動作させることができません。例えば:

spec/example_spec.coffee :

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

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

問題は、コンソール ログの出力が次のようになることです。

three
three
three

このようにしたい場所:

one
two
three

mocha テストでこれらの値をループするにはどうすればよいですか?

4

2 に答える 2

13

ここでの問題は、「値」変数を閉じているため、常に最後の値が何であれ評価されることです。

次のようなものが機能します。

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」の良さを追加しました。

于 2012-07-06T23:35:54.163 に答える
3

「データドリブン」を使用できます。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));
            })
        })
    })
})
于 2015-07-14T20:27:58.453 に答える