2017-04-24 127 views
0

我没有找到的cats一样,所以我写的匹配ValidatedNelspecs2的匹配:Specs2匹配器进行验证,并ValidatedNel

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])) 

是否有意义?你会如何改进它?

回答

1

我认为从其他匹配器派生匹配器是很好的,因为它可以让你快速获胜。然而,失败的消息可能不是很好。例如beValid匹配器会告诉你一个值不是true。因此,我建议写类似:

def beValid: Matcher[ValidationResult[_]] = { actual: ValidationResult[_] => 
    (actual.isValid, s"$actual is not valid") 
} 

另外,specs2-cats模块中的PR将不胜感激,如果你有时间:-)。

+0

感谢您的回复。我可能会改变我的匹配器。我也会看看'specs2-cats'模块。 – Michael