如何在播放框架应用程序中进行完整的集成测试?
Posted
技术标签:
【中文标题】如何在播放框架应用程序中进行完整的集成测试?【英文标题】:How to do full integration tests in a play framework app? 【发布时间】:2015-10-10 18:21:11 【问题描述】:我正在尝试为使用 play framework 2.4 和 scala 编写的应用程序编写测试。来源可here
我正在尝试编写适用于整个堆栈的测试。我们正在使用通过 REST API 提供的 neo4j 数据库。
这是我的测试:
package integration
import org.specs2.mutable._
import org.specs2.specification._
import play.api.test.Helpers._
import play.api.test._
import setup.TestSetup
class PublicAPISpec extends Specification with BeforeEach
def before = TestSetup.populateNeo4JData()
"The score feedback badge api" should
"deliver a correct svg file" in
running(FakeApplication())
val svg = route(FakeRequest(GET, "/api/badges/github/test/test.svg")).get
status(svg) must equalTo(OK)
contentType(svg) must beSome.which(_ == "image/svg+xml")
这是我的堆栈跟踪:
[info] The score feedback badge api should
[error] ! deliver a correct svg file
[error] There is no started application (Play.scala:71)
[error] play.api.Play$$anonfun$current$1.apply(Play.scala:71)
[error] play.api.Play$$anonfun$current$1.apply(Play.scala:71)
[error] play.api.Play$.current(Play.scala:71)
[error] setup.TestSetup$.setup$TestSetup$$cypher(TestSetup.scala:80)
[error] setup.TestSetup$.clearNeo4JData(TestSetup.scala:23)
[error] setup.TestSetup$.populateNeo4JData(TestSetup.scala:32)
[error] integration.PublicAPISpec.before(PublicAPISpec.scala:15)
[error] integration.PublicAPISpec.before(PublicAPISpec.scala:13)
编辑 事实证明,就像堆栈跟踪显然指出的主要问题在于 TestSetup 类。这个类依赖于一个播放应用程序来运行,而它不应该。经过一些重构后,它现在就像一个魅力。
【问题讨论】:
【参考方案1】:要进行路由测试,您需要在测试中包含 Application
上下文。
测试应该从
"deliver a correct svg file" in new WithApplication
....
您可以在Play's page about functional tests 上查看更多信息。
【讨论】:
感谢您的回答,但我得到了完全相同的异常 这是在一个分支上,我只是推了它:here你去。感谢您的帮助! 我想我找到了问题的根源,这看起来像是在 before 方法中播放的依赖项。修复后将更新此帖子的状态以上是关于如何在播放框架应用程序中进行完整的集成测试?的主要内容,如果未能解决你的问题,请参考以下文章