Scala Play2路由器/控制器测试没有命中数据库

时间:2015-10-07 18:02:11

标签: scala playframework specs2 playframework-2.4

我有一个简单的控制器测试通过路由器:

 "returns all reservations" should {
    running(FakeApplication()) {
      val Some(result) = route(FakeRequest(GET, "/reservations?envId=560d89ec5393af5d00bcfdf1"))

      mustBeValidResponse(result)
      contentAsString(result) must contain("environmentId")
    }
  }

但正如您所看到的,它需要一个ID作为URL的一部分,这意味着我的测试依赖于数据库中的数据,这是不好的。如何创建一个夹具或测试将运行的东西,以便测试运行而不实际依赖数据库中的数据?

1 个答案:

答案 0 :(得分:2)

我假设访问数据库的代码不是直接在控制器中,而是在另一个注入控制器的类中。您应该使用Play版本2.4中生成的模块系统。那么你需要的是替换通过mock访问DB的真实实现。更多信息: https://www.playframework.com/documentation/2.4.x/ScalaTestingWithGuice#Overriding-bindings-in-a-functional-test