Запустите тестирование в памяти db play framework

Я пытаюсь запустить несколько тестов для моего приложения. Должна быть возможность запуска тестов в новой новой базе данных памяти, но я не получу ее на работу.

Мой тест выглядит следующим образом:

"Server" should {

"persist data for personal user properly" in {
  running(FakeApplication(additionalConfiguration = inMemoryDatabase())) {

    //Create personal users
    val add1 = route(FakeRequest(POST, "/rest/personaluser").withFormUrlEncodedBody("name" -> "user1" , "email" -> "email@test1.com", "password" -> "test123", "gender" -> "male", "birthdate" -> "Oct 1, 2013", "nationality" -> "Sweden")).get
    val add2 = route(FakeRequest(POST, "/rest/personaluser").withFormUrlEncodedBody("name" -> "user2" , "email" -> "email@test2.com", "password" -> "test123", "gender" -> "male", "birthdate" -> "Oct 1, 2013","nationality" -> "Sweden")).get
    status(add1) must equalTo(OK)
    status(add2) must equalTo(OK)

    //Count users
    personalUserRepository.getAllPersonalUsers().length must beEqualTo(2)

    //Verify users exist
    personalUserRepository.checkIfPersonalUserExists("email@test1com") must beTrue
    personalUserRepository.checkIfPersonalUserExists("email@test2com") must beTrue

    //Verify user don't exist
    personalUserRepository.checkIfPersonalUserExists("email@test3com") must beFalse

    //Find user by email
    val findUser = route(FakeRequest(GET, "/rest/personaluserbyemail/email@test1.com")).get
    status(findUser) must equalTo(OK)
    contentAsString(findUser) must /("name" -> "user1")
    contentAsString(findUser) must /("email" -> "email@test1.com")
    contentAsString(findUser) must /("gender" -> "male")
    contentAsString(findUser) must /("nationality" -> "Sweden")
    contentAsString(findUser) must /("facebookID" -> "0")

  }
 }
}

Когда я запускаю это, я получаю ошибку InconsistentDatabase: Database 'default' is in inconsistent state!, Это потому, что стандарт inMemoryDB может не поддерживать MySQL, который я использовал для базы данных по умолчанию?

Тем не менее, я попытался добавить memoryDB следующим образом:

Определил это здесь

def memoryDB = Map("db.default.url" -> "jdbc:h2:mem:playdb;MODE=MYSQL;DB_CLOSE_DELAY=-1;IGNORECASE=TRUE;TRACE_LEVEL_SYSTEM_OUT=1")

И используйте это так:

"Server" should {

"persist data for personal user properly" in {
  running(FakeApplication(additionalConfiguration = memoryDB)) {

Но когда я делаю это так, он не использует базу данных в памяти, тест не проходит в //Count users потому что он не равен 2, но 7. В любом случае он использует реальную базу данных, а не мою новую свежую базу данных памяти, которую я пытаюсь использовать в этом FakeApplication.

Что я делаю не так или что мне не хватает?

Любой ответ, который может поставить меня на правильный путь, высоко ценится! Спасибо!

1 ответ

Начну с того, что я плохо знаком с Play. Вы никогда не упоминали, как настроили драйвер JDBC. Я подозреваю, что в тестовом режиме приложение все еще использует класс драйвера MySQL для базы данных H2. Вам понадобится файл jar H2 в вашем тестовом пути к классам.

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