Play-ReactiveMongo插件:play2使用reactiveMongoApi测试控制器

时间:2015-07-07 19:16:53

标签: mongodb testing playframework reactivemongo

在下面,我使用版本0.11.0.play24(https://github.com/ReactiveMongo/Play-ReactiveMongo)中的Play2 ReactiveMongo插件 对于Play 2.4。

如位于http://reactivemongo.org/releases/0.11/documentation/tutorial/play2.html的文档中所述,带有Mongo的Play2控制器实例化如下:

class MyController @Inject() (val reactiveMongoApi: ReactiveMongoApi)
extends Controller with MongoController with ReactiveMongoComponents { }

因此,由于控制器现在是一个类而不是一个对象,因此在测试用例中不可能将它用作单例。

但是,我不知道如何注入reactiveMongoApi以便在测试用例(ScalaCheck或其他......)中使用正确的参数实例化MyController()

您对如何使用ScalaCheck或Specs2测试此类控制器有任何想法/示例吗?

提前谢谢!

2 个答案:

答案 0 :(得分:2)

您可以为ReactiveMongoApi生成模拟(取决于您使用的模拟框架):

val reactiveMongoApi = mock[ReactiveMongoApi]

然后你可以这样做:

new MyController(reactiveMongoApi)

这是最简单的方法。要使用实际的ReactiveMongoApi对象:

val app = new GuiceApplicationBuilder()
  .in(Mode.Test)
  .configure("play.modules.enabled" -> "play.modules.reactivemongo.ReactiveMongoModule")
  .build

val reactiveMongoApi = app.injector.instanceOf[ReactiveMongoApi]

如果它变得更复杂,例如,部分模拟的嵌套依赖树(这是比单元测试更多的集成测试),您可能希望部分模仿Guice框架,如解释here

答案 1 :(得分:0)

该项目使用Guice进行依赖注入,使用Spec2进行控制器测试,使用Frisby进行端点测试。

https://github.com/luongbalinh/play-mongo