Использование spec2 и FakeApplication() для проверки вставок эволюции на сбой базы данных

Это для игры! Фреймворк 2.0.

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

У меня проблема в том, что мои эволюции выполняются (таблицы созданы, данные вставлены, но я не могу запросить их как имеющиеся). Во-первых, мой код.

CREATE TABLE user_data (
id SERIAL PRIMARY KEY,
user_name varchar(256) UNIQUE NOT NULL,
email varchar(256) NOT NULL,
password varchar(256) NOT NULL,
edits int NOT NULL,
reports int NOT NULL,
active BOOLEAN NOT NULL);

INSERT INTO user_data(user_name, email, password, edits, reports, active) VALUES ('user1', 'user1@email.com', '12345678', 0, 0, true);

В application.conf

db.default.driver=org.postgresql.Driver
db.default.url="postgres://user:password@localhost:5432/ME"

В build.scala

val appDependencies = Seq(
  // Add your project dependencies here,
    "postgresql" % "postgresql" % "9.1-901-1.jdbc4"
)

Тестовый код

class User_dataSpec extends Specification {

  "The Database" should {
    "persist data properly" in {
  running(FakeApplication(additionalConfiguration = inMemoryDatabase())) {

      //User_data.findAll().length must beEqualTo(1)
      //Create users
      User_data.create("user1", "password1", "email@test1.com") must beEqualTo(1)
      User_data.create("user2", "password2", "email@test2.com") must beEqualTo(2)
      User_data.create("user1", "password3", "email@test3.com") must beEqualTo(0)

      //Count users
      User_data.findAll().length must beEqualTo(2)

      //Verify users exist
      User_data.exists("user1") must beTrue
      User_data.exists("user2") must beTrue

      //Verify user doesn't exist
      User_data.exists("user3") must beFalse

      //Find users by ID
      User_data.findUser(1).get.user_name must beEqualTo("user1")
      User_data.findUser(2).get.user_name must beEqualTo("user2")

      //Fail to find users by ID
      User_data.findUser(3) must beNone

      //Find users by user_name
      User_data.findUser("user1").get.user_name must beEqualTo("user1")
      User_data.findUser("user2").get.user_name must beEqualTo("user2")

      //Fail to find users by user_name
      User_data.findUser("user3") must beNone

      //Authenticate users
      User_data.authenticate("user1", "password1") must beTrue
      User_data.authenticate("user2", "password2") must beTrue

      //Fail to authenticate users
      User_data.authenticate("user1", "password2") must beFalse
      User_data.authenticate("user3", "passwordX") must beFalse

      //Confirm the user was inserted properly
      val user = User_data.findUser("user1")
      user.get.user_name must beEqualTo("user1")
      user.get.email must beEqualTo("email@test1.com")
      user.get.password must beEqualTo("password1")
      user.get.edits must beEqualTo(0)
      user.get.reports must beEqualTo(0)
      user.get.active must beTrue
      }
    }
  }
}

Этот код пройдет, как написано, но не должен. Если я раскомментирую первый тестовый пример внутри рабочего блока, чтобы проверить, что моя функция findAll() должна иметь длину 1, она немедленно завершится ошибкой. Однако, если я изменю это, чтобы использовать постоянную базу данных PostgreSQL на моей машине, она все равно немедленно выйдет из строя, но когда я смотрю на базу данных PostgreSQL, моя таблица user_data содержит единственную вставку, примененную к эволюции, а таблица play_evolutions имеет запись для моей эволюции и помечен как состояние = "применяется" и последняя проблема = "".

Спасибо за любую помощь.

(P.S., я впервые пишу, но сделаю все возможное, чтобы принять ответ как можно скорее для тех, кто готов оказать свою помощь)

6
задан jazmit 19 November 2015 в 15:42
поделиться