2017-06-19 60 views
0

我試圖使用akka.http.scaladsl.testkit.responseAs爲了測試一些端點,但我無法弄清楚如何處理一個組織的編組/解組過程。 joda.time.DateTime對象。例如,考慮下面的案例類:Joda編組/解構在斯卡拉

case class ConfigEntity(id: Option[Int] = None, description: String, key: String, value: String, expirationDate: Option[DateTime] = None) 

另外,還要考慮以下航線測試:

"retrieve config by id" in new Context { 
    val testConfig = testConfigs(4) 
    Get(s"/configs/${testConfig.id.get}") ~> route ~> check { 
    responseAs[ConfigEntity] should be(testConfig) 
    } 
} 

當我運行「SBT測試」,代碼不編譯,拋出以下錯誤: 「找不到隱式價值的證據參數類型akka.http.scaladsl.unmarshalling.FromResponseUnmarshaller [me.archdev.restapi.models.ConfigEntity]」

我知道該消息是非常自我解釋,但我仍然不'不知道如何創建隱式的FromResponseUnmarshaller t代碼抱怨。

我的代碼是基於下面的例子:提前https://github.com/ArchDev/akka-http-rest

我只是創造一些新的實體,並試圖打轉轉......

感謝。

回答

0

該項目使用CirceSupport。這意味着您需要爲編譯器提供一個Circe解碼器來派生Akka Http Unmarshaller。

把解碼器範圍:

​​

很顯然,你必須處理可能出現的異常試圖解析您的日期時間和返回左不是右...

我必須說,我總是用SprayJsonSupport for Akka Http,這是我第一次見到CirceSupport。

希望這會有所幫助。

+0

感謝您的回答!我已經有了其中一個。我可以在執行'sbt run'時發送http請求,並且一切正常(配置實體保存在數據庫中)。但是當我執行'sbt test'時,出於某種原因,編譯器找不到隱式。 – goiaba

+0

檢查您的範圍內是否沒有多個Decoder for DateTime。也許編譯器在解析執行測試的含義時存在一些不明確的問題 – EmiCareOfCell44