You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Switch银行卡号测试代码中actual变量的测试时机疑问

Switch银行卡号测试代码的actual变量测试时机解答

测试代码

describe('Switch', function() {
  var expect = chai.expect;

  var prefixs = [4903, 4905, 4911, 4936, 564182, 633110, 6333, 6759];

  // 遍历所有前缀
  for (var i = 0; i < prefixs.length; i++) {
    // 通过循环生成16位长度的卡号
    var prefix = prefixs[i].toString();
    var actual = prefix;
    for (var j = 0; j < 16 - prefix.length; j++) {
      actual = actual + '0';
      console.log(actual)
    }

    (function (actual, prefix) {
      it ('has a prefix of ' + prefix + ' and a length of 16', function() {
        expect(detectNetwork(actual)).to.equal('Switch');
      });
    })(actual, prefixs[i]);
});

用户问题

上述代码中,actual变量会以4903(第一个前缀)、49030、490300……这类中间长度的形式被测试,还是仅当它达到16位长度时才会被测试?请解释原因。

解答

只会测试16位长度的actual值,中间长度的版本不会被纳入测试,原因如下:

  • 内层的for循环会持续给actual拼接字符0,直到它的长度达到16位才会终止循环。只有当整个循环跑完后,才会执行后面的立即执行函数(IIFE),把此时已经是16位的actual传入测试用例it中。
  • 循环里的console.log(actual)只是打印过程中的临时变量值,但完全没有触发测试逻辑——测试用例是在整个内层循环结束后才注册的,所以只有最终生成的16位卡号字符串会被用来执行断言测试。

内容的提问来源于stack exchange,提问作者user20079207

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 14:20:27