JavaScript,随机数的摩卡测试

JavaScript, mocha test for random numbers

我使用下面的代码 return 随机数数组 我的问题是我应该如何用 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. 您可以使用不同的 startend 值测试点 #3。
  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);
        });
    });
});