Scala specs2 соответствий с "ака"
Я хотел бы проверить, если строка содержит другую, предоставляя метку, используя "ака". Например:
"31 west 23rd street, NY" aka "address" must contain("11065")
Это не с
address '31 west 23rd street, NY' doesn't contain '11065'.
Однако я хотел бы указать, что 11066 является почтовым индексом. То есть:
"31 west 23rd street, NY" aka "address" must contain("11065") aka "zip code"
Который не работает.
Есть идеи, как этого добиться? Ожидаемый результат, который я ожидаю, это:
address '31 west 23rd street, NY' doesn't contain zip code '11065'.
Ниже приведено возможное решение, но оно мне не нравится, поскольку оно не является родным для spec2 и поддерживает только строки:
def contain(needle: String, aka: String) = new Matcher[String] {
def apply[S <: String](b: Expectable[S]) = {
result(needle != null && b.value != null && b.value.contains(needle),
s"${b.description} contains $aka '$needle'",
s"${b.description} doesn't contain $aka '$needle'", b)
}
}
1 ответ
Решение
Я не думаю, что есть решение, применимое ко всем матчерам. В этом случае вы можете использовать aka
машины
def contain(expected: Expectable[String]): Matcher[String] = new Matcher[String] {
def apply[S <: String](e: Expectable[S]): MatchResult[S] =
result(e.value.contains(expected.value),
s" ${e.value} contains ${expected.description} ${expected.value}",
s" ${e.value} does not contain ${expected.description}",
e)
}
"31 west 23rd street, NY" aka "address" must contain("11065" aka "the zip code")
Это отображает
31 west 23rd street, NY does not contain the zip code '11065'