Scalatests неправильно обрабатывает запрос

Я работаю над системой учета / управления временем, которая использует Scalatra и Slick в качестве FRM. Все работает нормально, кроме случаев, когда я пытаюсь запустить тесты.

В моем сервлете у меня есть следующие части, которые используются при обработке запроса, поступающего в конечную точку, которая тестируется.

object Query {
  def getHours(user_id: String, start: String, end: String) = {
    sql"""SELECT id, entry_type, entry_date, duration, description
          FROM entry
          WHERE user_id=$user_id and entry_date >= $start and entry_date <= $end"""
          .as[(String, String, String, Double, String)]
  }
}

trait Routes extends ScalatraBase with FutureSupport with JacksonJsonSupport {
  get("/users/:user_id/hours/?") {
    val user_id = params.get("user_id").getOrElse("")
    val start   = params.get("start").getOrElse("")
    val end     = params.get("end").getOrElse("")

    if(Validator.dateIsValid(start) && Validator.dateIsValid(end)) {
      contentType = formats("json")

      db.run(Query.getHours(user_id, start, end)).map(_.map {
        vals: (String, String, String, Double, String) => Entry(vals)
      })
    } else {
      halt(400, "Invalid parameters\n")
    }
  }
}

Идея состоит в том, чтобы вернуть массив JSON, содержащий каждую запись, которую пользователь сделал за некоторый период времени. Одна запись содержит информацию о пользователе, например, дату, когда пользователь работал, тип работы, которую пользователь выполнял, продолжительность и т. Д.

В моих тестах у меня есть следующая часть:

test("GET request to endpoint with proper parameters") {
  get("/users/user123/hours/?start=2018-04-20&end=2018-05-20") {
      status should equal (200)
  }
}

Если я вызываю конечную точку в веб-браузере или с помощью curl, она работает нормально, но когда я запускаю тесты, состояние возврата конечной точки равно 500.

Кажется, что проблема связана с использованием потоков. Также db.run возвращает тип данных Future, но он везде обрабатывается правильно.

Также я уверен, что db.run (..) - это действие, которое вызывает проблему.

Я пробовал конвейерную обработку db.run (..) с помощью onComplete, но не могу заставить его вернуть что-либо. Есть ли лучший / более безопасный способ вернуть данные, поступающие из DBIO-Action?

0 ответов

Другие вопросы по тегам