Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 预期'^169.254美元&x27;茉莉花单元测试中为/^169.254$/_Javascript_Angular_Typescript_Unit Testing_Karma Jasmine - Fatal编程技术网

Javascript 预期'^169.254美元&x27;茉莉花单元测试中为/^169.254$/

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

我是新的角度,因果报应,茉莉花测试框架。我得到以下错误。它工作得很好。升级到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) 在

我的代码如下

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'类型的参数。