【问题标题】:JavaScript, mocha test for random numbersJavaScript,随机数的摩卡测试
【发布时间】:2016-12-07 07:16:45
【问题描述】:

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

【问题讨论】:

  • 那么,你想要什么?是返回一个数字还是返回哪个随机数?
  • @JuanPicado - 不确定我想验证该功能是否正常工作,所以我愿意接受...

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


【解决方案1】:
  1. 您显然可以验证元素的数量。
  2. 您可以运行两次(或多次)并验证元素是否变化(在 chai assert.notDeepEqual 中)。
  3. 如果每个元素都来自某个范围,您也可以验证这一点。只需遍历生成的数组并验证每个元素是否大于start 且小于end
  4. 您可以使用不同的 startend 值测试第 3 点。
  5. 测试边缘案例startend,例如对于start &gt; end, start === end, start &lt; 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);
        });
    });
});

【讨论】:

  • 谢谢 1+,您能否提供示例,您将如何测试它?
  • 添加了一些示例
猜你喜欢
  • 1970-01-01
  • 2019-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-24
相关资源
最近更新 更多