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
相关产品推荐
相关产品推荐

