2015-05-18 3 views
1

у меня есть этот код, чтобы проверить список пуст или нет, если он пуст, он будет иметь ValidationError («не должен пуст»)Как получить ValidationError от JsResult в тесте

case class Foo(t: List[String], r: String) 

object Foo { 
    implicit val fooReads: Reads[Foo] = (
    (JsPath \ "t").read[List[String]] 
     .filter(ValidationError("should not empty"))(_.nonEmpty) and 
    (JsPath \ "r").read[String] 
) 
} 

Однако я Не знаю, как получить ошибку проверки в тесте.

val json = """ 
     |{ 
     | "t": [], 
     | "r": "123" 
     |} 
    """.stripMargin 
val result: JsResult[Foo] = json.validate[Foo] 

result.isError shouldBe true 
result.asEither.left.get.head._2.head.message shouldBe "should not empty" 

код немного некрасиво, есть лучший способ проверить ValidationError от JsResult?

Большое спасибо заранее

+0

вам нужна ошибка только в тестах, в случае пустого списка ли? Или вы хотите, чтобы в ваших чтениях было какое-то правило проверки правильности? Значение этого правила будет бросать в любое время, когда список пуст, а не только в тестах. – sedovav

+0

Я просто хочу получить сообщение об ошибке, но синтаксис является подробным –

ответ

0

К сожалению, я не думаю, что вы будете в состоянии сделать сообщение проверить любой компактнее - это довольно сложная структура, вы должны ориентироваться.

Учитывая, что мое предложение на самом деле пойти в другую сторону, и вырваться из этой огромной цепи разыменовывает в несколько шагов, которые могут быть более легко следовать.

Я сделал это в Specs2 «Unit» стиль, но это было бы просто адаптироваться:

result.isError must beTrue 

val allErrors = result.asEither.left.get 
allErrors must haveSize(1) 

val firstBadNode = allErrors.head 
firstBadNode._1 must beEqualTo(JsPath \ "t") 

val badNodeErrors = firstBadNode._2 
badNodeErrors must haveSize(1) 
badNodeErrors.head.message must beEqualTo("should not empty") 

Если и когда кто-то что-то refactors и ломает ваш Reads[Foo], это может сэкономить немного времени фиксации сломанный тест ...