2013-08-18 74 views

回答

2

您可以在规范等BDD测试框架之上编写这样的集成测试。 Unfiltered项目有许多这样的例子,应该为Scalatra等其他Web框架工作。

例如,看一看ServerSpec

"A Server" should { 
    "respond to requests" in { 
    http(host as_str) must_== "test" 
    } 
    .... 
} 

它开始了在setup指定的测试服务器,并在说明书中使用调度击中它。关键部分在unfiltered.spec.jetty.Served trait中实现,您所描述的是:启动和停止服务。还有Specs2版本:unfiltered.specs2.jetty.Served

您可以使用的另一个技巧是sbt-revolver,这是我最喜欢的插件在进行任何web开发时,特别是与JRebel一起使用的。这个插件可以在后台加载你的web服务器。我还没有尝试过一起测试,但如果在测试过程中不需要更改服务器端,它可以工作。

1

Scalatra提供了一个DSL来编写测试。有支持specs2scalatest

By default嵌入式Jetty将用于测试。如果您想提供自己的服务器,则可以重新使用EmbeddedJettyContainer实施并覆盖startstopservletContextHandler

start将在执行测试之前被调用,它允许在需要时启动服务器。在测试后调用stop。要使用addServlet(..)添加您的servlet,需要使用servletContextHandler

这是从SPEC2整合:

trait BaseScalatraSpec extends SpecificationStructure with FragmentsBuilder with ScalatraTests { 
    override def map(fs: =>Fragments) = Step(start())^super.map(fs)^Step(stop()) 
} 

trait ScalatraTests extends EmbeddedJettyContainer with HttpComponentsClient { } 

另外,您可以提供自己的Container实现。

相关问题