Esto es para jugar! Framework 2.0.Usando specs2 y FakeApplication() para probar la base de datos falla la evolución inserta
Estoy tratando de escribir un caso de prueba simple para asegurar que mi modelo de usuario funciona correctamente y los datos persistentes en mi base de datos. Me gustaría ejecutarlo en la memoria si es posible para poder comenzar de nuevo con cada nueva ejecución.
El problema que tengo es que mi evolución se ejecuta (se crean tablas, se insertan datos, pero no puedo consultarlo como si estuvieran allí). Primero, mi código.
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', '[email protected]', '12345678', 0, 0, true);
En application.conf
db.default.driver=org.postgresql.Driver
db.default.url="postgres://user:[email protected]:5432/ME"
En build.scala
val appDependencies = Seq(
// Add your project dependencies here,
"postgresql" % "postgresql" % "9.1-901-1.jdbc4"
)
El código de prueba
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 protected]") must beEqualTo(1)
User_data.create("user2", "password2", "[email protected]") must beEqualTo(2)
User_data.create("user1", "password3", "[email protected]") 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 protected]")
user.get.password must beEqualTo("password1")
user.get.edits must beEqualTo(0)
user.get.reports must beEqualTo(0)
user.get.active must beTrue
}
}
}
}
Este código pasará como está escrito, sin embargo, shouldn' t. Si elimino el comentario del primer caso de prueba dentro del bloque en ejecución para probar que mi función findAll() debe tener una longitud de 1, fallará inmediatamente. Sin embargo, si cambio esto para usar una base de datos PostgreSQL persistente en mi máquina, aún fallará inmediatamente, pero cuando miro la base de datos PostgreSQL, mi tabla user_data tiene insertada la evolución única insertada en ella, y la tabla play_evolutions tiene la entrada para mi evolución y se marca como estado = "aplicado" y último problema = "".
Cualquier ayuda sería apreciada, gracias.
(PS, soy un primer cartel tiempo, pero haré todo lo posible para aceptar una respuesta tan pronto como sea posible para quienes están dispuestos a prestar su ayuda)
Lo siento, me perdí tu respuesta cuando lo hiciste, pero gracias! –
np, gracias por mi primera respuesta aceptada! – jazmit
Eso no tiene ningún sentido. Si especifica otro nombre para la base de datos en memoria, entonces las solicitudes de conexión también deberían extenderse con ese nombre. Además de eso, necesitarías una entrada db.test en tu configuración. Si no sigue estos pasos, simplemente usará la base de datos 'predeterminada' de todos modos. Tal vez me perdí algo. – EECOLOR