Playframework 重头戏2.4:如何在单元测试期间禁用路由文件加载?
后台:我正在使用Play2.4(Java)和InjectedRoutesGenerator以及Guice模块来配置各种依赖项。但是在单元测试期间,FakeApplication试图通过注入器从路由文件加载所有控制器,其中一些控制器由于单元测试环境中不可用的外部依赖关系而失败 在从play.test.WithApplication扩展的单元测试期间,如何禁用默认路由文件处理?或者如何用自定义路由文件替换默认路由? 我试图使用,但我发现Playframework 重头戏2.4:如何在单元测试期间禁用路由文件加载?,playframework,playframework-2.4,Playframework,Playframework 2.4,后台:我正在使用Play2.4(Java)和InjectedRoutesGenerator以及Guice模块来配置各种依赖项。但是在单元测试期间,FakeApplication试图通过注入器从路由文件加载所有控制器,其中一些控制器由于单元测试环境中不可用的外部依赖关系而失败 在从play.test.WithApplication扩展的单元测试期间,如何禁用默认路由文件处理?或者如何用自定义路由文件替换默认路由? 我试图使用,但我发现路由器未找到错误。显然,我犯了一些错误,我不知道在哪里 我不太了
路由器未找到
错误。显然,我犯了一些错误,我不知道在哪里
我不太了解中引用的my.application.Router和conf/my.application.routes之间的链接。除了
路由
之外的路由文件也不会被编译。我在这里回答我自己的问题。在花更多的时间处理Play源代码之后,我找到了routes文件和生成的Router类之间的连接。希望它能帮助别人
Play的route compiler任务编译conf
文件夹中以.routes
结尾的所有文件以及默认的routes
文件。生成的类名总是路由
,但包名取决于文件名。如果文件名为routes
(默认路由文件),则编译的类将放置在router
包中,因此完全限定的类名为router.routes
(这是play.http.router
的默认值)
对于所有其他路由文件,RouteCompiler通过从文件名中删除.routes
来派生包名。所以对于my.test.routes
,play.http.router
的值应该是my.test.routes
这是我测试的基类,带有自定义路由器和db配置元素
public class MyTestBase extends WithApplication {
@Override
protected Application provideApplication() {
Application application = new GuiceApplicationBuilder()
.configure("db.default.driver", "org.h2.Driver")
.configure("db.default.url", "jdbc:h2:mem:play")
.configure("play.http.router", "my.test.Routes")
.build();
return application;
}
}
如果您想完全不加载路由,那么这里有一个
特性
,如果您使用Scala、Guice
和ScalaTest
,您可以将它混入测试类中。这是在玩游戏2.5。我还展示了如何禁用过滤器,因为它们与路由相关
我知道这与Java上的ask和Play 2.4有点不同,但这可能会对人们有所帮助,因为我在回答这个问题时试图实现一些非常相似的东西
trait disabledrooting使用OneAppPerSuite扩展PlaySpec{
覆盖def fakeApplication():应用程序={
配置应用程序(新的GuiceApplicationBuilder()
.router(router.empty)
.configure(“play.http.filters”->“play.api.http.NoHttpFilters”))
.build()
}
/**覆盖以在禁用的路由上添加其他配置*/
def配置应用程序(appBuilder:GuiceApplicationBuilder):GuiceApplicationBuilder=appBuilder
}
我花了很多时间才找到你的帖子,并设法解决了这个问题。你救了我一天,谢谢!我还是不明白。我只是在“app/conf”(默认路由文件)下有一个名为“routes”的文件。我试过“路由器路由”,但没找到。我不太明白“我的测试”对应的是什么。你有一个名为my.test.route的文件吗?是的,我在测试中使用了'app/conf/my.test.routes'。你说我的“我试过”路由器“但没找到”是什么意思?如果使用“app/conf”下的默认路由文件,则不需要设置play.http.router config var。