Я пишу тесты для вывода Json некоторых вызовов API в моем API, написанных с помощью Play на Scala. В моих тестах этот шаблон продолжает появляться, и я хотел бы дедуплицировать его.Сложный пользовательский Matcher
val response = sut.index()(FakeRequest())
val expected = Json.parse("""{ "channels":[] }""")
status(response) must equalTo(OK)
contentType(response) must beSome.which(_ == "application/json")
contentAsJson(response) mustEqual expected
Мой первый подход был такой:
def assertSameJson(response: Future[Result], expected: JsValue): Unit = {
status(response) must equalTo(OK)
contentType(response) must beSome.which(_ == "application/json")
contentAsJson(response) mustEqual expected
}
Но это не чувствует идиоматических вообще. Является ли кажется, что я добавляю XUnit утверждает в своих спецификациях
Я хотел бы кое-что приводит к
response must beSameJson(expected)
Ближайший вещь, которую я сумел был
def beSameJson(other:Any) =
be_==(other) ^^ ((t: Future[Result]) => contentAsJson(t)) and
be_==(OK) ^^ ((t: Future[Result]) => status(t))
Но это не проверить на контент- типа, и я чувствую, что это просто очень трудно читать. Есть ли лучший способ написать этот Matcher?
Это довольно близко к работе, но 'beSome.which (_ ==" application/json ") ^^ {contentType (_: Future [Result])}' не работает. contentType() возвращает параметр [String], и по какой-то причине я не понимаю, там есть несоответствие типа. Я исправил его, заменив 'be _ == (Some (" application/json ")) ^^ {contentType (_: Future [Result])}'. Во всяком случае, спасибо. Это выглядит намного лучше, чем то, что я делаю. –
На самом деле, глядя на документацию, что-то подобное должно работать: beSome (beEqualTo ("foo")), поскольку beSome (...) может принимать совпадение в качестве аргумента. – dth