2016-12-07 3 views
1

乱数の配列を返す次のコードを使用します 私の疑問はどのように私がmochaとchaiを使って単体テストすればいいのでしょうか?JavaScript、乱数のモハテスト

var randomArray = function(start, end) { 
    var range = []; 
    var resetRange = function() { 
    for (let i = start; i < end; i++) { 
     range.push(i); 
    } 
    shuffle(range); 
    }; 

    return function(n) { 
    if (range.length === 0) { 
     resetRange(); 
    } 
    return range.splice(0, n); 
    }; 
}; 


var arr = randomArray(10,20); 

arr(10)例えば

[15, 16, 14, 17, 11, 19, 18, 10, 12, 13] 

arr(3)例えば

を提供する提供します
+0

だから、何ヨーヨーを期待したいですか?数値を返すのか、乱数を返すのか –

+0

@JuanPicado - 機能が動作しているかどうかを確認したいと思うかどうかわからない... –

答えて

3
  1. 明らかに要素数を確認できます。
  2. 2回(または複数回)実行して要素が変化していることを確認できます(assert.notDeepEqual)。
  3. 各要素が特定の範囲内にある場合は、それも確認できます。生成された配列をループし、各要素がstartより大きく、endより小さいかどうかを確認するだけです。
  4. 異なるstartendの値でポイント#3をテストできます。
  5. エッジケースの例startおよびendstart > endstart === endstart < 0、...

のためにそれはあなたが達成したい自信とあなたはそのテストに費やすことができる時間のレベルに依存します。 (質問は、それを使用しているようES5構文で)私が言及したいくつかのポイントの

例:

var assert = require('chai').assert; 

var testLength = function(length) { 
    // WHEN 
    var actualLength = randomArray(10, 20)(length).length; 

    // THEN 
    assert.equal(actualLength, length); 
}; 

var testElementsRange = function(start, end) { 
    // WHEN 
    var actualArray = randomArray(10, 20)(10); 

    // THEN 
    for (var index = 0; index < actualArray.length; ++index) { 
     assert.isAtLeast(actualArray[index], start); 
     assert.isAtMost(actualArray[index], end); 
    } 
} 

describe('randomArray', function() { 
    describe('generates array', function() { 
     it('with length 3', function() { 
      testLength(3); 
     }); 

     it('with length 10', function() { 
      testLength(10); 
     }); 

     it('with random elements', function() { 
      // WHEN 
      var array1 = randomArray(10, 20)(10); 
      var array2 = randomArray(10, 20)(10); 

      // THEN 
      assert.notDeepEqual(array1, array2); 
     }); 

     it('with elements within 10-20 range', function() { 
      testElementsRange(10, 20); 
     }); 
    }); 
}); 
+0

ありがとうございました1+、どのようにテストしますか? –

+0

ありがとう私はいくつかのコード例を意味する:) –

+0

いくつかの例が追加されました – luboskrnac