首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeError:无法读取未定义的属性“应该”

TypeError:无法读取未定义的属性“应该”
EN

Stack Overflow用户
提问于 2021-03-04 17:24:34
回答 1查看 243关注 0票数 0

我有一个函数(detectNetwork),它检查信用卡号码,如果它与公认的供应商匹配,则识别该信用卡的供应商。我有另一个函数(detectNetworkTest),它可以使用Mocha调用来测试detectNetwork并验证它是否正常工作。

我正在为中国UnionPay进行验证,并在调用detectNetworkTest时收到以下错误:

TypeError:无法读取上下文中未定义的属性“应该”。(detectNetwork.test.js:241:39)

它引用detectNetworkTest中的这一行:

detectNetwork(cardNumberToCheck).should.equal('China UnionPay');

在运行此函数时,我可以通过登录到控制台来确认cardNumberToCheck是我需要使用的正确值,因此我不得不试图确定为什么要将它读取为未定义的值。

detectNetwork

代码语言:javascript
复制
var detectNetwork = function(cardNumber) {
  // Note: `cardNumber` will always be a string

  var re = {
    "Diner's Club": /^3[8-9][0-9]{12}$/,
    "American Express": /^3[4,7][0-9]{13}$/,
    "Visa": /^4([0-9]{12}|[0-9]{15}|[0-9]{18})$/,
    "MasterCard": /^5[1-5]([0-9]{14})$/,
    "Discover": /^6(011|5[0-9]{2}|4[4-9]{1}[0-9]{1})[0-9]{12,15}$/,
    "Maestro": /^(5018|5020|5038|6304)[0-9]{8,15}$/
  }

  for(var card in re) {
    if(re[card].test(cardNumber)) {
      return card;
    }
  }
}

detectNetworkTest

代码语言:javascript
复制
describe('should support China UnionPay', function() {

  var should = chai.should();
  var prefixes = [];
  var randomNumber = Math.random().toString(7).substr(2, 17);
  var randomCardNumbers = [];

  for(i=624; i<627; i++) {
    prefixes.push(i);
  }

  for(j=622126; j<622926; j++) {
    prefixes.push(j);
  }

  for(k=6282; k<6288; k++) {
    prefixes.push(k);
  }

  prefixes.forEach(value => {
    for(i=14; i<18; i++) {
      var randomCardNumber = (value + "x" + randomNumber).substring(0,i);
      randomCardNumbers.push(randomCardNumber);
    };
  });

  randomCardNumbers.forEach(value => {
    var prefix = value.split("x")[0];
    var cardNumberToCheck = value.replace("x","");

    it('has a prefix of ' + prefix + ' and a length of ' + cardNumberToCheck.length, function() {
      detectNetwork(cardNumberToCheck).should.equal('China UnionPay');
    });
  });

});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-04 17:32:47

该错误意味着detectNetwork(cardNumberToCheck)的计算结果为未定义。

这是因为在没有return的情况下,re[card].test(cardNumber)绝对没有对手。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66479976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档