2017-10-29 15 views
0

文字列の特殊文字の正規表現を返す関数をテストしているので、テストではエスケープされた文字列equals to正規表現をエスケープしてテスト中に文字列の等価性が失われる

Expected value to match: 
    "4**2" 
Received: 
    "4\\*\\*2" 

を言ってこれは私が書かれているテストです:

describe("escapeRegExp",() => { 
    // required for quotes test 
    test("Escapes all RegExp characters",() => { 
    expect(escapeRegExp("4**2")).toMatch("4\*\*2");}); 

escapeRegExp機能が"4\*\*2"を返しますが、それは"4**2"をすることが期待しています。

しかし、私は

expect(escapeRegExp("4**2")).toMatchSnapshot("4\*\*2");を使用するときにそれが正常に動作します。

.toBeまたはtoEqual()でチェックしているのはなぜですか?

toEqualまたはtoMatchSnapshotと動作させるために追加する必要のあるフィールド/引数はありますか? \*\*以来*   —であることは文字列リテラルで定義されたエスケープシーケンスではなく、*はリテラル文字列でエスケープする必要がないため、

答えて

1

"4\*\*2"は、まったくバックスラッシュを含まない文字列、4**2(あります\は無視されます)。 "4\\*\\*2"を意味します。文字列は4\*\*2です。例えば:あなたはtoMatchSnapshotを渡す文字列は、オプションのスナップショットであることを

describe("escapeRegExp",() => { 
    // required for quotes test 
    test("Escapes all RegExp characters",() => { 
    expect(escapeRegExp("4**2")).toMatch("4\\*\\*2");}); 

注意。リテラル値をテストするのにtoMatchSnapshotを使用しないでください(toMatchを使用します)。スナップショットテストの詳細here

+0

答えをくれてありがとうございます。私は '*'がエスケープ文字の一部ではないことを認識していますが、それはすべての特殊文字をエスケープする質問の一部です。 – warl0ck

+0

また、 'toBe'と' toEqual'と 'toMatch'の違いを答えに加えてください。 – warl0ck

+0

@ warl0ck:ドキュメントはそれをカバーしています。 –

関連する問題