私はパーサーのテストを書いていましたが、これは最善ではないかもしれませんが、これまでのところうまくいきました。テストは、次のように、すべてのコード ブロックに対して完全に定義された AST 表現を想定しています。
(parse "x = 5") `shouldBe` (Block [Assignment [LVar "x"] [Number 5.0]])
しかし、より複雑なケースに移ると、より「あいまいな」検証が必要になりました。
(parse "t.x = 5") `shouldBe` (Block [Assignment [LFieldRef (Var "t") (StringLiteral undefined "x")] [Number 5.0]])
この例ではundefined
、解析結果と比較したくないフィールドを示しています (文字列リテラルのソース位置です)。現在、私が見ている唯一の修正方法は、コードを書き直して のshouldSatisfy
代わりに使用するshouldBe
ことです。他の解決策が見つからない場合は、これを行う必要があります。