Javascript 预期'^169.254美元&x27;茉莉花单元测试中为/^169.254$/
我是新的角度,因果报应,茉莉花测试框架。我得到以下错误。它工作得很好。升级到angular 7后,我得到以下错误 [1A[2K[31mElectron 2.0.2(节点8.9.3)主机组件应调用 ipAddressPattern和check IP坏IP失败[39m应为“^169.254$” 为/^169.254$/。 在 在UserContext.it(karmatestshim.js:298475:34418) 在ZoneDelegate../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke (karma test shim.js:295054:26) 在ProxyZoneSpec../node_modules/zone.js/dist/proxy.js.ProxyZoneSpec.onInvoke (karma test shim.js:294539:39) 在ZoneDelegate../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke (karma test shim.js:295053:52) 在区域../node_modules/Zone.js/dist/Zone.js.Zone.run(karma test shim.js:294813:43) 在runInTestZone(karma test shim.js:294104:34) 在用户上下文中。(karma test shim.js:294119:20) 在 我的代码如下Javascript 预期'^169.254美元&x27;茉莉花单元测试中为/^169.254$/,javascript,angular,typescript,unit-testing,karma-jasmine,Javascript,Angular,Typescript,Unit Testing,Karma Jasmine,我是新的角度,因果报应,茉莉花测试框架。我得到以下错误。它工作得很好。升级到angular 7后,我得到以下错误 [1A[2K[31mElectron 2.0.2(节点8.9.3)主机组件应调用 ipAddressPattern和check IP坏IP失败[39m应为“^169.254$” 为/^169.254$/。 在 在UserContext.it(karmatestshim.js:298475:34418) 在ZoneDelegate../node_modules/zone.js/dist
public static readonly BAD_IP_ADDRESS_PATTERN: string = "^169\.254$";
public ipAddressPattern(ipAddress: string): RegExp {
return CommonUtil.isBadIPAddress(ipAddress);
}
public static isBadIPAddress(ipAddress: string): any {
if (ipAddress) {
if (ipAddress.startsWith(CommonConstants.BAD_IP_ADDRESS)) {
return CommonConstants.BAD_IP_ADDRESS_PATTERN;
} else {
return ValidationPatterns.IP_ADDRESS;
}
}
}
单元测试
it("should call ipAddressPattern and check IP bad IP", () => {
expect(component.ipAddressPattern("169.254.11.11")).toBe(new RegExp(CommonConstants.BAD_IP_ADDRESS_PATTERN));
});
早期的代码是这样的
expect(component.ipAddressPattern(“169.254.11.11”)).toBe(CommonConstants.BAD_IP_ADDRESS_PATTERN)
,它可以正常工作。升级后出现编译问题。所以我改为expect(component.ipAddressPattern(“169.254.11.11”)。toBe(新的RegExp(CommonConstants.BAD_IP_ADDRESS_PATTERN))
在公共常量类中,代码如下所示
public static readonly BAD_IP_ADDRESS_PATTERN: string = "^169\.254$";
public ipAddressPattern(ipAddress: string): RegExp {
return CommonUtil.isBadIPAddress(ipAddress);
}
public static isBadIPAddress(ipAddress: string): any {
if (ipAddress) {
if (ipAddress.startsWith(CommonConstants.BAD_IP_ADDRESS)) {
return CommonConstants.BAD_IP_ADDRESS_PATTERN;
} else {
return ValidationPatterns.IP_ADDRESS;
}
}
}
在其他类中,代码如下所示
public static readonly BAD_IP_ADDRESS_PATTERN: string = "^169\.254$";
public ipAddressPattern(ipAddress: string): RegExp {
return CommonUtil.isBadIPAddress(ipAddress);
}
public static isBadIPAddress(ipAddress: string): any {
if (ipAddress) {
if (ipAddress.startsWith(CommonConstants.BAD_IP_ADDRESS)) {
return CommonConstants.BAD_IP_ADDRESS_PATTERN;
} else {
return ValidationPatterns.IP_ADDRESS;
}
}
}
在CommonUtil类中,下面给出了代码
public static readonly BAD_IP_ADDRESS_PATTERN: string = "^169\.254$";
public ipAddressPattern(ipAddress: string): RegExp {
return CommonUtil.isBadIPAddress(ipAddress);
}
public static isBadIPAddress(ipAddress: string): any {
if (ipAddress) {
if (ipAddress.startsWith(CommonConstants.BAD_IP_ADDRESS)) {
return CommonConstants.BAD_IP_ADDRESS_PATTERN;
} else {
return ValidationPatterns.IP_ADDRESS;
}
}
}
请建议我如何解决此问题。在javascript中,
String.prototype.startsWith
方法(CommonUtil
类中的@line 3)需要的是原始字符串,而不是正则表达式(字符串格式)
expect(component.ipAddressPattern(“169.254.11.11”).toString()).toBe(new RegExp(CommonConstants.BAD\u IP\u ADDRESS\u PATTERN).toString().replace(/^\/\\/$/g.)
您需要删除对new RegExp()
的调用。这将每次返回一个新的RegExp
对象,导致测试失败
若要修复编译错误,您需要更正ipAddressPattern
的返回类型。如果不返回RegExp
对象,则返回的是字符串
所以签名必须是:public ipAddress模式(ipAddress:string):string
当我添加“@types/jasmine”:“^2.8.7”
,在devdependences中,问题得到了解决。
所以我喜欢这个
"devDependencies": {
"@angular/compiler-cli": "^7.2.0",
"@angular/language-service": "~7.2.0",
"@types/jasminewd2": "~2.0.3",
"@types/core-js": "^0.9.46",
"@types/jasmine": "^2.8.7",
... other modules ...
}
“以开头”和“完全是”之间有区别。您必须转义传递给new RegExp()
)的字符串中的特殊字符(为什么它是字符串?)。先生,此代码ipAddress.startsWith(CommonConstants.BAD\u IP\u ADDRESS)
是由非常资深的JS开发人员编写的,我只需要修复单元测试用例部分。早期的代码是这样的expect(component.ipAddressPattern(“169.254.11.11”)).toBe(CommonConstants.BAD_IP_ADDRESS_PATTERN);
并且它工作正常。升级后出现编译问题。所以我改为new RegExp()
new RegExp()===new RegExp()
为false
。您应该删除对new RegExp()
的调用,因此我应该如何修复它,请建议?我的工作是只修复单元测试用例。这将中断测试(再次)只需将以下序列替换为:if(ipAddress.startsWith(CommonConstants.BAD\u IP\u ADDRESS))
与if(ipAddress.startsWith(“169.254”)
我不能更改常量类,我必须只更改单元测试用例。好的,然后在测试中替换:expect(component.ipAddressPattern(“169.254.11.11”)).toBe(新RegExp(CommonConstants.BAD_IP_ADDRESS_PATTERN))
expect(component.ipAddressPattern(“169.254.11.11”)。toBe(new RegExp(CommonConstants.BAD_IP_ADDRESS_PATTERN).toString().replace(/^\/\/$/g');
执行此操作后,我收到一个错误,因为'string'类型的参数不能分配给'Expected'类型的参数。