簡體   English   中英

JavaScript,隨機數的摩卡測試

[英]JavaScript, mocha test for random numbers

我使用下面的代碼返回隨機數組我的問題是我應該如何用mocha和chai進行單元測試,因為這里的問題是每次運行隨機數提供的...

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)將提供

[18, 15, 10]
  1. 您顯然可以驗證元素的數量。
  2. 您可以運行它兩次(或不同次)並驗證元素是否變化(在chai assert.notDeepEqual )。
  3. 如果每個元素都在某個范圍內,您也可以驗證它。 只需遍歷生成的數組並驗證每個元素是否大於start而不是end
  4. 您可以測試點#3具有不同的startend的值。
  5. 測試邊緣情況startend ,例如start > 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);
        });
    });
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM