在 Mocha/Chai 上为 JS 测试 40 多种组合

Testing 40+ combinations on Mocha/Chai for JS

现在正在学习 JS 的 Mocha + Chai,我对如何测试这段代码有点困惑:

for (var j = 12; j <= 19; j++) {
    if (cardNumber.length === j) {
        if (cardNumber.slice(0, 4) === '5018') {
            return 'Maestro';
        } else if (cardNumber.slice(0, 4) === '5020') {
            return 'Maestro';
        } else if (cardNumber.slice(0, 4) === '5038') {
            return 'Maestro';
        } else if (cardNumber.slice(0, 4) === '6304') {
            return 'Maestro';
        }
    }
}

我正在测试作为卡号的输入字符串是否满足以下任何条件,其中指定了前 4 个元素并且卡的长度必须在 12 和 19 之间。

describe('Maestro', function() {
  // Write full test coverage for the Maestro card
  var should = chai.should();

  for (var length = 12; length <= 19; length++) {
    (function(length) {
      it ('has a prefix of 5018 and a length of ' + length, function() {
        detectNetwork('5018' + ???).should.equal('Maestro');
      });
    })(length)
  };
});

我不想为 4 个前缀中的每一个 + 12 - 19 之间的每个长度编写所有测试用例。有没有一种方法可以通过增加前缀字符串的元素数量来添加它等于长度?

我试过用 12-19 的附加整数数组放置一个 for 循环,并将它添加到测试函数的前缀中,但它仍然不起作用

我想你正在寻找这样的东西:

describe('Maestro', function() {
  // Write full test coverage for the Maestro card
  var should = chai.should();
  var prefixes = ['5018', '5020', '5038', '6304'];
  for(var p=0; p<prefixes.length;p++) {
      for (var length = 12; length <= 19; length++) {
        (function(length, prefix) {
          it ('has a prefix of ' + prefix + ' and a length of ' + length, function() {
            var longString = 'abcdefghijklmnopqrstuvwxyz';
            var testString = prefix + longString.slice(0, length-prefix.length);
            detectNetwork(testString).should.equal('Maestro');
          });
        })(length, prefixes[p])
      };
  }
});