2013-10-08 22 views
5

Próbuję uruchomić kilka testów dla mojej aplikacji. Powinno być możliwe uruchomienie testów w nowej, świeżej bazie danych pamięci, ale nie sprawię, że zadziała.Uruchom test w pamięci db gra framework

Mój testowy wygląda to teraz:

"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 protected]", "password" -> "test123", "gender" -> "male", "birthdate" -> "Oct 1, 2013", "nationality" -> "Sweden")).get 
    val add2 = route(FakeRequest(POST, "/rest/personaluser").withFormUrlEncodedBody("name" -> "user2" , "email" -> "[email protected]", "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 protected]") must beTrue 
    personalUserRepository.checkIfPersonalUserExists("[email protected]") must beTrue 

    //Verify user don't exist 
    personalUserRepository.checkIfPersonalUserExists("[email protected]") must beFalse 

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

    } 
} 
} 

Gdy uruchomię to pojawia się błąd InconsistentDatabase: Database 'default' is in inconsistent state!. Czy to dlatego, że standard inMemoryDB może nie obsługiwać MySQL, którego używałem w domyślnej bazie danych?

Jednak starałem się dodać memoryDB tak zamiast:

Zdefiniowane tutaj

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

i używać go tak:

"Server" should { 

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

Ale kiedy robię to w ten sposób , nie korzysta z bazy danych w pamięci, test kończy się niepowodzeniem pod adresem //Count users, ponieważ nie jest równy 2, ale 7. W rzeczywistości korzysta z prawdziwej bazy danych, a nie z nowej bazy db nowej pamięci, którą próbuję użyć w tym FakeAp plication.

Co robię źle lub czego brakuje?

Każda odpowiedź, która może postawić mnie na właściwej drodze, jest bardzo cenna! Dzięki!

Odpowiedz

0

Zacznę od stwierdzenia, że ​​nie jestem dobrze zaznajomiony z Play. Nigdy nie wspominałeś o tym, jak skonfigurowałeś sterownik JDBC. Podejrzewam, że w trybie testowym aplikacja nadal używa klasy sterownika MySQL w stosunku do H2 DB. Będziesz także potrzebował pliku H2 jar w swojej ścieżce testowej klasy.