2013-08-18 107 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實現。

相關問題