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'
Другие вопросы по тегам