Grails 3.x-为功能测试创建测试数据

时间:2019-01-15 14:18:05

标签: grails gorm functional-testing grails-3.3

我有一个Grails应用程序,该应用程序受Spring Security保护。 我试图创建一个测试用户,随后使用它从登录屏幕登录,然后遍历我的屏幕。 似乎很普通的尝试去做。

但是,在(据说)成功创建了测试用户(在测试规范中,不是Bootstrap.groovy)之后,尝试登录时找不到同一用户。

当我在应用程序代码中执行User.list()时(在登录时有断点),没有任何内容。但是它们存在于测试中。就像有两个单独的会话。

有人知道这样做的正确方法吗? 如果我没有明显的答案,很高兴分享代码。

1 个答案:

答案 0 :(得分:-1)

结果证明,@Rollback注释的作用超出了我所能看到的范围。 而且(根据文档);

  

确保每种测试方法都在回滚的事务中运行

对此尚不清楚的是,它似乎创建(至少是Grails版本)完全独立于应用程序会话的测试管理事务。 因此,如果出于上述目的使用@Rollback批注,则在测试中创建的用户(例如,在setup()中将永远不会在应用程序中看到该用户,因此当Spring Security的身份验证逻辑失败时,无法加载用户。

请注意,在删除@Rollover注释之后,必须使用类似的内容手动创建事务块;

User.withTransaction {
 // ... do work here
}