これはPlay用です!フレームワーク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 DBを使用すると、すぐに失敗しますが、PostgreSQL DBを見ると、user_dataテーブルには単一のevolutionが適用された挿入があり、play_evolutionsテーブルにはエントリがあります私の進化のために、state="applied"およびlastproblem=""としてマークされています。
助けていただければ幸いです、ありがとう。
(PS、私は初めてのポスターですが、助けてくれる人のためにできるだけ早く答えを受け入れるように最善を尽くします)