我是新手!这是一个非常新手的问题,但我无法绕过它......
我浏览了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数据库,该怎么办?
答案 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 ...]