【问题标题】:How to block database in rails tests如何在 Rails 测试中阻止数据库
【发布时间】:2013-07-26 19:06:00
【问题描述】:

除了范围和集成测试之外,有很多建议是避免在 Rails 测试中触及数据库的最佳实践。有没有办法阻止规范进行数据库查询?类似于webmock 用于数据库...

【问题讨论】:

  • 您可能应该在集成测试中针对实际数据库进行测试。您可以使用嵌入式数据库,或者使用事务并将它们回滚,这样您就不会实际保存到数据库中。
  • 是的,我在我的问题中提到了这一点。集成测试应该命中数据库,但在其他更类似于单元的测试中,我希望能够阻止它。

标签: ruby-on-rails database testing


【解决方案1】:

如果您使用工厂 gem,例如 Factory_Girl 或 Fabrication,您可以选择使用未保存到数据库的资源实例。例如,在工厂女孩中,您可以执行以下操作:

# Returns a User instance that's not saved
user = FactoryGirl.build(:user)

# Returns a saved User instance
user = FactoryGirl.create(:user)

有关在 Rails 中测试的更多信息,请查看:

【讨论】:

  • 是的,我正在使用工厂女孩,并尽可能使用build 或build_stubbed,但仍有一些地方我的代码可能会尝试保存到数据库中,所以我很乐意成为能够完全阻止它。
  • 我认为完全阻止它的唯一方法是在您的测试数据库上使用没有写入权限的数据库用户。但是,这会破坏您的集成测试。我认为目前没有一种方法可以满足您的要求,但如果有的话,我会很高兴知道该怎么做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-14
  • 1970-01-01
  • 2012-06-28
  • 1970-01-01
  • 2014-11-10
  • 2010-10-30
  • 2017-01-21
相关资源
最近更新 更多