简化 HSpec 中的不完整断言

Simplify incomplete assertions in HSpec

我想对 returns 复杂嵌套数据结构的函数进行单元测试,但我只对该结构的某些字段感兴趣。例如:

expectedResult = Right (
  UserRecord {
    name = "someName",
    id = <don't care>
    address = AddressRecord {
      street = "someStreet",
      id = <don't care> 
      }
    }
  )

在 HSpec 中是否有通用的方法来断言上述形式的结果?也就是某种写表达式的方式

result `shouldBe` expectedResult

在哪里我不需要指定我不感兴趣的预期结果的那些部分?我找到了 答案,它需要将所有 don't care 字段从 result 复制到 expectedResult;这可能会变得相当乏味。也许有使用镜头的标准方法?或者一些我没听说过的带有断言助手的库?

一个简单的方法:

result `shouldSatisfy` \a ->
    name a == "someName"  &&
    street (address a) == "someStreet"