JavaScript,随机数的摩卡测试

时间:2016-12-07 07:16:46

标签: javascript node.js unit-testing mocha chai

我使用以下代码返回随机数组 我的问题是我应该如何用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 个答案:

答案 0 :(得分:3)

  1. 您显然可以验证元素的数量。
  2. 您可以运行两次(或不同时间)并验证元素是否有所不同(在chai assert.notDeepEqual中)。
  3. 如果每个元素都在某个范围内,您也可以验证它。只需遍历生成的数组并验证每个元素是否大于start且小于end
  4. 您可以使用不同的startend值测试第3点。
  5. 测试边缘案例startend,例如start > endstart === endstart < 0,....
  6. 这取决于您想要达到的信心水平以及您可以花在测试上的时间。

    我提到的一些要点的例子(在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);
            });
        });
    });