Fixtures.deleteDatabase()不会重置auto_increment

时间:2011-06-08 13:54:42

标签: playframework

我是新手!这是一个非常新手的问题,但我无法绕过它......

我浏览了play-scala的教程(yabe),并在第2轮被阻止。

it should "retrieve Posts with author" in {

  User.create(User(NotAssigned, "bob@gmail.com", "secret", "Bob", false)) 
  Post.create(Post(NotAssigned, "My first post", "Hello world", new Date, 1))

  Post.count().single() should be (1)

  val posts = Post.find("author_id={id}").on("id" -> 1).as(Post*)

  posts.length should be (1)

  val firstPost = posts.headOption

  firstPost should not be (None)
  firstPost.get.author_id should be (1)
  firstPost.get.title should be ("My first post")
  firstPost.get.content should be ("Hello!")
}

问题是每次运行此测试时,都会调用Fixture.deleteAll(),并且数据库应为空。但是auto_increment没有重置,因此在第一行创建的User对象的ID大于1,禁止创建Post对象(author_id = 1)。

我已将%test config设置为%test.jpa.ddl = create-drop。

我的问题是,如果我希望在每次测试之前真正重置%test数据库,该怎么办?

1 个答案:

答案 0 :(得分:2)

而不是将'1'传递给Post创建方法,而是传递先前的用户ID。没有测试应该依赖于这样的硬编码约束,因为它们与程序无关(你不关心用户的id,只关注Post引用那个id)

类似的东西:

 val user = User.create(User(NotAssigned, "bob@gmail.com", "secret", "Bob", false)) 
 Post.create(Post(NotAssigned, "My first post", "Hello world", new Date, user.id))
 [... replace all '1' by user.id ...]