【问题标题】:How to I write a Specs2 matcher for "a,b,c".containsAllOf("b","a")?如何为“a,b,c”.containsAllOf("b","a") 编写 Specs2 匹配器?
【发布时间】:2013-05-26 10:13:33
【问题描述】:

我是 Scala/Play 2.1/Specs2 堆栈的新手,所以如果这个问题看起来很简单,请原谅,但是我很难编写规范来测试“字符串包含单词 'GET'”的情况。我有一个 Play 2.1 Action,它返回一个 Access-Control-Allow-Methods 标头值,例如

Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS

我的规范对其他标头进行直接相等检查没有问题,但我无法弄清楚如何检查每个 GET、PUT、POST、DELETE 和 OPTIONS 的 Access-Control-Allow-Methods 标头。我预计像“must contains("GET") 之类的东西可以工作,但是 IDE 在这方面会变红:

type mismatch;  found   : org.specs2.matcher.ContainMatcher[String]  required: org.specs2.matcher.Matcher[Option[String]]   SessionsSpec.scala  /dm2-server/test/admin  line 53 Scala Problem

我的规格看起来像...

"send 200 on OPTIONS request on valid route" in {
  running(FakeApplication()) {
    var fakeReq = FakeRequest("OPTIONS", "/admin/sessions")
    val Some(result) = route(fakeReq)
    status(result) must equalTo(OK)
    header(ACCESS_CONTROL_ALLOW_ORIGIN, result) must equalTo(Some("*"))
    header(ACCESS_CONTROL_ALLOW_HEADERS, result) must equalTo(Some(CONTENT_TYPE))
    val expectedMethods = Seq(GET, PUT, POST, DELETE, "OPTIONS")
    header(ACCESS_CONTROL_ALLOW_METHODS, result) must containAllOf(expectedMethods)
  }
}

在Specs2中如何表达“这个字符串是否包含所有这些值”的用例?

【问题讨论】:

  • 你使用的是什么版本的 scala 和 specs2?
  • Scala 是 2.10.1。如果相信 Scala-IDE,Specs2 版本是 specs2_21.10.jar。
  • 一个提示:你可以写equalTo(Some("*"))而不是beSome("*")

标签: scala playframework-2.0 playframework-2.1 specs2


【解决方案1】:

这与您要完成的任务类似:

"A split option string " should{
  "be able to be verified with a containsAllOf matcher" in {
    val headerVal = Some("a, b, c, d, e")
    val expected = Seq("a", "e")

    headerVal must beSome
    headerVal.get.split(", ").toSeq must containAllOf(expected)
  }
}

问题是您试图获取Option[String] 并在Traversable 匹配器中使用它来对抗Seq。要进行这种比较,两个项目都需要为Traversable。为了达到这一点,我首先检查Option 以确保它是Some。然后我得到它并用逗号分割它,然后把它变成Seq。一旦两个部分都是Traversable,您就可以使用containAllOf 匹配器。

【讨论】:

  • 您也可以在同一表达式中使用:headerVal must beSome.like { case value => value.split(",").toSeq must containAllOf(expected) }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-29
  • 2012-09-03
  • 2015-06-12
  • 1970-01-01
  • 2011-05-30
  • 2021-10-06
  • 2021-12-27
相关资源
最近更新 更多