javascript - 在 jasmine 单元测试中,预期 '^169.254$' 应为 /^169.254$/
我对 Angular、Karma、Jasmine 测试框架是新手。我遇到了以下错误。之前它工作正常。升级到 Angular 7 后,我遇到了以下错误。
[1A[2K[31mElectron 2.0.2 (Node 8.9.3) HostComponent 应该调用 ipAddressPattern 并检查 IP 错误 IP 失败[39m 预期 '^169.254$' 应为 /^169.254$/. 在 在 UserContext.it (karma-test-shim.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) 在 Zone../node_modules/zone.js/dist/zone.js.Zone.run (karma-test-shim.js:294813:43) 在 runInTestZone (karma-test-shim.js:294104:34) 在 UserContext. (karma-test-shim.js:294119:20) 在
我的代码如下。
在单元测试中
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(new 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);
}
在 CommonUtil 类中,代码如下所示。
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;
}
}
}
请告诉我如何解决这个问题。
答案#1
你需要移除对 new RegExp() 的调用。那会每次返回一个新的 RegExp 对象,导致测试失败。
要修复编译错误,您需要更正 ipAddressPattern 的返回类型。您 没有 返回一个 RegExp 对象,而是返回了一个 string。
所以签名需要是:public ipAddressPattern(ipAddress: string): string
答案#2
在 JavaScript 中,String.prototype.startsWith 方法(在你的 CommonUtil 类的第 3 行)期望的是原始字符串,而不是正则表达式(字符串格式)。
expect(component.ipAddressPattern("169.254.11.11").toString()).toBe(new RegExp(CommonConstants.BAD_IP_ADDRESS_PATTERN).toString().replace(/^\/|\/$/g, ''))