2016-01-12 6 views
0

у меня после этого согласовань:Specs2 - Игнорирование свойства в согласовани с будущим набором результатов

def haveBodyWith[T: TypeTag: Unmarshaller](content: T)(implicit await: Duration): Matcher[Future[HttpResponse]] = { 
    ===(content) ^^ { (f: Future[HttpResponse]) => { Await.result(f, await).entity.as[T].right.get } } 
} 

извлечь результат из HttpResponse, а затем сравнить его с ожидаемым содержанием. До сих пор этот помощник работал отлично. Теперь у меня есть конкретный случай использования, когда содержимое ответа представляет собой последовательность классов case, и я хочу игнорировать одно из свойств класса case. Я не могу получить эту работу:

def haveBodyWith(content: Foo): Matcher[HttpResponse] = { 
    ===(content) ^^ { (_: HttpResponse).entity.as[Foo].right.get.copy(name = "") } 
} 

case class Foo(id: Int, name: String) 

Если бы я был только содержание без будущего для сравнения, я сделал это таким образом (возможно, что-то подобное с послед тематических классов), но в будущем сделать это немного сложнее. Как вы думаете?

Спасибо!

ответ

1

Обсуждение произошло Google groups и окончательное решение:

def haveBodyWith1(content: Foo): Matcher[Future[HttpResponse]] = { 
    ===(normalize(content)) ^^ { (response: HttpResponse) => 
    normalize(response.foo) } 
}.await 

def normalize(foo: Foo) = foo.copy(name = "")