scala – 使用specs2和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',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表具有该条目为了我的进化而被标记为state =“applied”和last problem =“”. 任何帮助将不胜感激,谢谢. (P.S.,我是第一次发布海报,但会尽快为那些愿意提供帮助的人尽快接受答复) 解决方法
* 更新 *
正如Jakob所说,进化失败的原因可能是因为为MySQL编写的SQL与H2DB不兼容.您可以通过使用单独的MySQL根据原始答案进行测试来解决此问题,或者将H2DB置于MySQL兼容模式中,这可以解决问题(参见Fixtures in Play! 2 for Scala). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |