Scala 已验证和已验证NEL的Specs2匹配器
我没有找到猫的ValidatedNel的specs2匹配器,因此我正在编写这样的匹配器:Scala 已验证和已验证NEL的Specs2匹配器,scala,matcher,specs2,scala-cats,Scala,Matcher,Specs2,Scala Cats,我没有找到猫的ValidatedNel的specs2匹配器,因此我正在编写这样的匹配器: import cats.data._ import cats.implicits._ import org.specs2.matcher.Matcher type ValidationFailure = String type ValidationResult[A] = ValidatedNel[ValidationFailure, A] def beValid: Matcher[Validation
import cats.data._
import cats.implicits._
import org.specs2.matcher.Matcher
type ValidationFailure = String
type ValidationResult[A] = ValidatedNel[ValidationFailure, A]
def beValid: Matcher[ValidationResult[_]] =
beTrue ^^ ((_: ValidationResult[_]).isValid)
def beInvalid(failure: ValidationFailure): Matcher[ValidationResult[_]] =
beEqualTo(failure.invalidNel)
def beInvalid[A: Monoid](failures: ValidationFailure*): Matcher[ValidationResult[A]] =
beEqualTo(failures.toList foldMap (_.invalidNel[A]))
这有意义吗?您建议如何改进它?我认为从其他匹配者那里获得匹配者是很好的,因为它可以让您快速获胜。但是,失败消息可能不是很好。例如,beValid matcher会告诉您某个值不是true,从而失败。所以我建议写一些类似的东西:
def beValid: Matcher[ValidationResult[_]] = { actual: ValidationResult[_] =>
(actual.isValid, s"$actual is not valid")
}
另外,如果您有时间,请在本模块中填写PR:-。谢谢您的回复。我可能会更换我的配对者。我也会看看specs2 cats模块。