Неудачные тесты spec2 для приложения scalatra с поддержкой swagger

При вызове прототипа теста spec3 в приложении scalatra с поддержкой swagger тесты завершаются неудачно.

Вот код теста/спецификации: ServletSpec.scala

class ServletSpec extends ScalatraSpec { def is =
  "Calling the generated swagger client"        ^
    "should return success"                     ! swaggerClient^
                                                end

  addServlet(classOf[TestController], "/api/*")

  def swaggerClient = get("/api/account") {
    status must_== 200
    response.body must_== 
      """my json response"""
  }  
}

TestController выглядит так: пакет com.newco

import org.scalatra._
import org.scalatra.swagger._

//sample - see http://www.scalatra.org/guides/swagger.html

// JSON-related libraries
import org.json4s.{DefaultFormats, Formats}

// JSON handling support from Scalatra
import org.scalatra.json._

class TestController(implicit val swagger: Swagger) extends ScalatraServlet 
    with JacksonJsonSupport  with JValueResult {

  protected val applicationName = Some("AppName")
  protected val applicationDescription = "description."

   // Sets up automatic case class to JSON output serialization
  protected implicit val jsonFormats: Formats = DefaultFormats

  // Before every action runs, set the content type to be in JSON format.
  before() {
    contentType = formats("json")
  }

  val getAccount = 
    (apiOperation[GetAccountResponse]("getAccount")
      summary "Get users account information"
      notes "Returns the users profile"
      parameter queryParam[AccessToken]("accessToken").description("Access token returned from authentication service")
      )

  get("/account", operation(getAccount)){
      SampleData.getAccountResponse
  }
}

sbt test fails with the following error (no detailed trace available): [error] x should return success [error] ' [error] [error] [error] Error 500 com.acme.TestController [error] [error] [error]

ОШИБКА HTTP: 500

[error]

Problem accessing /api/account. Reason: [error]

    com.acme.TestController

[error]
Powered by Jetty:// [error]
[error] [error] [error] ' [error] is not equal to ...


person drsquidop    schedule 21.02.2013    source источник


Ответы (1)


Решение состоит в том, чтобы изменить строку spec2 с:

addServlet(classOf[TestController], "api/*")

to:

implicit val swagger = new GPNSwagger 
addServlet(new TestController, "/api/*")

Аннотация Swagger делает класс контроллера абстрактным и не может быть создан как объявленный тип. Этот альтернативный метод отображения сервлета работает

person drsquidop    schedule 21.02.2013