2017-04-24 53 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

相關問題