TypeError: Cannot read property 'should' of undefined
TypeError: Cannot read property 'should' of undefined
我有一个功能 (detectNetwork),它检查信用卡号,如果它与公认的供应商匹配,则识别该卡的供应商。我有另一个函数 (detectNetworkTest),可以调用它使用 Mocha 来测试 detectNetwork 并验证它是否正常工作。
我正在为中国银联进行验证,在调用 detectNetworkTest 时收到以下错误:
TypeError: 无法读取未定义的 属性 'should'
在上下文中。 (detectNetwork.test.js:241:39)
在detectNetworkTest中指的是这一行:
detectNetwork(cardNumberToCheck).should.equal('China UnionPay');
当 运行 这个函数时,我可以通过登录到控制台来确认 cardNumberToCheck 是我需要使用的正确值,所以我有点卡在试图确定为什么它被读取为未定义。
检测网络
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
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');
});
});
});
错误意味着 detectNetwork(cardNumberToCheck)
的计算结果未定义。
这是因为没有return
以防re[card].test(cardNumber)
完全不匹配
我有一个功能 (detectNetwork),它检查信用卡号,如果它与公认的供应商匹配,则识别该卡的供应商。我有另一个函数 (detectNetworkTest),可以调用它使用 Mocha 来测试 detectNetwork 并验证它是否正常工作。
我正在为中国银联进行验证,在调用 detectNetworkTest 时收到以下错误:
TypeError: 无法读取未定义的 属性 'should' 在上下文中。 (detectNetwork.test.js:241:39)
在detectNetworkTest中指的是这一行:
detectNetwork(cardNumberToCheck).should.equal('China UnionPay');
当 运行 这个函数时,我可以通过登录到控制台来确认 cardNumberToCheck 是我需要使用的正确值,所以我有点卡在试图确定为什么它被读取为未定义。
检测网络
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
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');
});
});
});
错误意味着 detectNetwork(cardNumberToCheck)
的计算结果未定义。
这是因为没有return
以防re[card].test(cardNumber)