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?