Я выполнил тесты, которые я написал, используя `jest`, я получил неожиданную ошибку` TypeError: p.replace не является функцией` - PullRequest
0 голосов
/ 02 февраля 2020

Я написал класс PerlRegExp, унаследовал RegExp и добавил метод replace. Когда я запустил тесты, которые я написал, используя jest, я получил неожиданную ошибку TypeError: p.replace is not a function

PerlRegExp

export class PerlRegExp extends RegExp {
  constructor(pattern: string, flags: string) {
    super(handlePattern(pattern, flags), handleFlags(flags));
  }

  replace(string: string, replaceValue: string) {
    // ...
  }
}

Код теста

import { PerlRegExp } from "../src";

describe("PerlRegExp", () => {
  it("replace test \\u", () => {
    const p = new PerlRegExp(" (?:- (\\w) ) ", "xig");
    const r = p.replace("color-red", "\\u$1");
    expect(r).toBe("colorRed");
  });
});

Неожиданные результаты во время тестирование

λ npm t

> perl-regexp@0.1.0 test D:\ajanuw\perl-regexp
> jest

 FAIL  test/perl-regexp.test.ts
  PerlRegExp
    × replace test \u (3ms)

  ● PerlRegExp › replace test \u

    TypeError: p.replace is not a function

      3 |   it("replace test \\u", () => {
      4 |     const p = new PerlRegExp(" (?:- (\\w) ) ", "xig");
    > 5 |     const r = p.replace("color-red", "\\u$1");
        |                 ^
      6 |     expect(r).toBe("colorRed");
      7 |   });
      8 |

      at Object.<anonymous> (test/perl-regexp.test.ts:5:17)

Test Suites: 1 failed, 1 total
Tests:       1 failed, 1 total
Snapshots:   0 total
Time:        4.893s, estimated 5s
Ran all test suites.
npm ERR! Test failed.  See above for more details.

Я не знаю, в чем проблема, потому что PerlRegExp может работать нормально, за исключением этой ошибки во время тестирования, пожалуйста, помогите мне, спасибо.

1 Ответ

0 голосов
/ 02 февраля 2020

Решено расширением RegExp.prototype:)

declare global {
  interface RegExp {
    replace(str: string, replaceValue: string): string;
  }
}

RegExp.prototype.replace = function(str: string, replaceValue: string) {
  // ...
};

export class PerlRegExp extends RegExp {
  constructor(pattern: string, flags: string) {
    super(handlePattern(pattern, flags), handleFlags(flags));
  }

  replace(str: string, replaceValue: string) {
    return super.replace(str, replaceValue);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...