我正在尝试为 Rails 2.3.5 应用程序编写一个好的、全面的测试套件,但我发现显然在功能测试中每个 http 请求都包含在一个事务中。这意味着您无法在操作运行后测试数据库中发生的更改。我已经发现并正在使用 assert_difference,但这还不够。我想测试关联是否已经建立,这似乎不起作用。这对于内置的 Rails 测试框架来说是不可能的吗?我应该使用集成测试吗?我是否应该将更多的逻辑考虑到我的模型中?我真的不确定我打破了哪个约定,但在这方面我的应用程序确实感觉已经偏离了 rails 。想停止骑在铁路枕木上。 =/
最佳答案
我可能误解了你在做什么,但我有更新数据库的集成测试,然后从数据库中读回这些值并在同一个测试中对它们进行断言。默认情况下(无论如何在 Rails 2.3.5 中)事务应该只在每次测试结束时回滚。
TBH,我发现功能测试对我来说不如集成测试有用。例如,我的测试用户通常需要登录我的应用程序才能执行任何有用的操作,这涉及(在我见过的大多数 Rails 身份验证插件中)调用两个 Controller ——这只能在集成测试中完成。
关于ruby-on-rails - 如何在 Rails 2 自动化测试中的 http 请求后测试对数据库的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4709701/