Я разработал сервисы RESTful, используя play 2.5, и я пытаюсь разработать функциональные тесты для своих служб. Я следую официальной документации here todo it.Функциональные тесты Службы воспроизведения с использованием scalatest
Вот тест для контроллера:
package com.x.oms.controller
import org.scalatestplus.play._
import play.api.inject.guice.GuiceApplicationBuilder
import play.api.mvc.Action
import play.api.mvc.Results._
import play.api.routing.Router
import play.api.test.Helpers.{GET => GET_REQUEST}
class Test extends PlaySpec with OneServerPerSuite {
implicit override lazy val app =
new GuiceApplicationBuilder().router(Router.from {
// TODO: Find out how to load routes from routes file.
case _ => Action {
Ok("ok")
}
}).build()
"Application" should {
"be reachable" in {
// TODO: Invoke REST services using Play WS
// TODO: Assert the result
}
}
}
Вот контроллер:
package controllers.com.x.oms
import com.google.inject.Inject
import com.x.oms.AuthenticationService
import com.x.oms.model.DBModels.User
import com.x.oms.model.UIModels.Token
import play.api.Logger
import play.api.libs.json.Json
import play.api.mvc.{Action, Controller}
class AuthenticationController @Inject()(as: AuthenticationService) extends Controller {
private val log = Logger(getClass)
def authenticate = Action(parse.json) {
request =>
val body = request.body
val username = (body \ "username").as[String]
val password = (body \ "password").as[String]
log.info(s"Attempting to authenticate user $username")
val token = as.authenticate(User(username, password))
log.debug(s"Token $token generated successfully")
token match {
case token: String => Ok(Json.toJson(new Token(token)))
case _ => Unauthorized
}
}
def logout = Action {
request =>
val header = request.headers
as.logout(header.get("token").get)
Ok("Logout successful")
}
def index = Action {
request =>
Ok("Test Reply")
}
}
Маршруты Файл:
# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~
POST /login controllers.com.x.oms.AuthenticationController.authenticate
POST /logout controllers.com.x.oms.AuthenticationController.logout
GET / controllers.com.x.oms.AuthenticationController.index
Я не хочу, чтобы пересмотреть маршруты информации в каждом тесте. Мне нужна ваша помощь для загрузки файла маршрутов при создании приложения в каждом тесте.
Пожалуйста, дайте мне знать, как файл маршрута можно загрузить. Заранее спасибо.
Ваше решение сработало! Хотя мне пришлось добавить WithApplication для тестирования. Спасибо за вашу помощь. – Ravi
Есть несколько способов добиться этого. Учитывая, что я вижу, что вы используете DI, мне бы хотелось, чтобы мои тесты расширяли PlaySpec, OneAppPerSuite (и, возможно, несколько других, если вы считаете полезным), где вы можете создать свое приложение через GuiceApplicationBuilder, а затем использовать инжектор DI для настройки вашей среды. – andyczerwonka