JavaScript,随机数的 Mocha 测试

标签 javascript node.js unit-testing mocha.js 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. 您显然可以验证元素的数量。
  2. 您可以运行它两次(或多次)并验证元素是否变化(在 chai assert.notDeepEqual 中)。
  3. 如果每个元素都来自某个范围,您也可以验证这一点。只需遍历生成的数组并验证每个元素是否大于 start小于end .
  4. 您可以使用不同的 start 测试点 #3和 end值(value)观。
  5. 测试边缘案例 startend ,例如对于 start > end , start === end , start < 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);
        });
    });
});

关于JavaScript,随机数的 Mocha 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41011488/

相关文章:

javascript - 我怎样才能使我的部分测试可重用,以便它可以在其他 future 使用 Cypress Javascript 的测试中使用或再次调用

java - 在 arquillian 中设置数据源

javascript - 小型 JavaScript 库停止工作

node.js - 当服务器向特定客户端发出事件(不同的 Angular2 服务)时,不要将 socket.io-client 与 Angular2 一起使用

javascript - Moment.js 插件我应该安装这两个依赖项吗?

node.js - Axios 请求 - 查看响应中的所有对象

android - 如何在单元测试中获取上下文以在内存数据库对象中创建 Room 数据库

javascript - Google maps API V3 - 在完全相同的地方有多个标记

javascript - 简单立方体场景中的颗粒状纹理

javascript - php curl使用html下拉选择填充变量