网站搜索

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, ''))