Для людей, которые спешат, вот код и шаги .
В продолжении Play 2.x (Scala) это соперник Spring MVC? — Введение , в этом блоге, я покажу, как мы реализуем простую реализацию Контроллера, используя ScalaTest / ScalaMock. Я продолжу свой предыдущий пример реализации DAL в Play 2.x (Scala), Slick, ScalaTest основных операций CRUD в каталоге Coffee.
В нашем предыдущем примере мы уже реализовали черту DAL под названием CoffeeComponent с базовым CRUD, как показано ниже:
trait CoffeeComponent {
def find(pk: String): Query[Coffees.type, Coffee]
def findall(pk: String): Query[(Coffees.type, Suppliers.type), (Coffee, Supplier)]
def list(page: Int, pageSize: Int, orderBy: Int, filter: String): Query[(Coffees.type, Suppliers.type), (Coffee, Supplier)]
def delete(pk: String): Int
}
Мы строим инъекцию CoffeeComponent в CoffeeController и создаем объект Singleton с тем же именем, как показано ниже:
class CoffeesController(coffeeComponent: CoffeeComponent) extends Controller {
...
def delete(pk: String) = Action {
database withSession {
println("in db session")
Home.flashing(coffeeComponent.delete(pk) match {
case 0 => "failure" -> "Entity has Not been deleted"
case x => "success" -> s"Entity has been deleted (deleted $x row(s))"
})
}
}
}
object CoffeesController extends CoffeesController(new CoffeeComponentImpl)
Как показано выше, у нас есть метод удаления, мы создадим ScalaMock для имитации метода удаления coffeeComponent и управления ожидаемым поведением для возврата 1 выполненной строки и подтверждения статуса HTTP SEE_OTHER, как показано ниже,
class CoffeesControllerTest extends FunSpec with ShouldMatchers with MockFactory {
describe("Coffee Controller with Mock test") {
it("should delete a coffee record with assert on status") {
running(FakeApplication(additionalConfiguration = inMemoryDatabase())) {
val mockComponent = mock[CoffeeComponent]
(mockComponent.delete _).expects("Columbian") returning (1) twice
val controller = new CoffeesController(mockComponent)
mockComponent.delete("Columbian") should equal (1)
val result = controller.delete("Columbian")(FakeRequest())
status(result) should equal (SEE_OTHER)
}
}
}
}
Если вы заметили, мы расширяем FunSpec из ScalaTest для BDD . Также HTTP-статус SEE_OTHER , потому что успех перенаправлен на страницу индекса.
Теперь, если вы запустите ScalaTest, вы увидите результат в STS, как показано ниже,
Я надеюсь, что этот блог помог. В моем следующем блоге я расскажу о тестировании маршрутов контроллера и тестировании внешнего интерфейса.
