我有一个简单的控制器测试通过路由器:
"returns all reservations" should {
running(FakeApplication()) {
val Some(result) = route(FakeRequest(GET, "/reservations?envId=560d89ec5393af5d00bcfdf1"))
mustBeValidResponse(result)
contentAsString(result) must contain("environmentId")
}
}
但正如您所看到的,它需要一个ID作为URL的一部分,这意味着我的测试依赖于数据库中的数据,这是不好的。如何创建一个夹具或测试将运行的东西,以便测试运行而不实际依赖数据库中的数据?
答案 0 :(得分:2)
我假设访问数据库的代码不是直接在控制器中,而是在另一个注入控制器的类中。您应该使用Play版本2.4中生成的模块系统。那么你需要的是替换通过mock访问DB的真实实现。更多信息: https://www.playframework.com/documentation/2.4.x/ScalaTestingWithGuice#Overriding-bindings-in-a-functional-test