在Rails3中记录持续过去的测试

时间:2011-03-24 13:58:06

标签: ruby-on-rails-3

我正在通过railstutorial.org网站工作,似乎在集成测试方面遇到了问题。假设在一个有效的表单发布之后检查用户是否正确创建,但是由于测试数据库没有得到滚动支持,后续测试失败,这会导致错误,因为验证用户不能拥有相同的电子邮件。任何解释为什么记录会持续存在?如果相关,则相关代码来自this列表。

4 个答案:

答案 0 :(得分:2)

注意:我是Rails Tutorial的作者。在Peter Cooper reported之后,config.cache_classes = false线被添加,有必要让RSpec和Spork在他的系统上一起工作。由于我没有发现它是必要的,并且由于它似乎引入了许多问题(例如在这个线程中确定的那些),因此该行已被删除。如果您使用the latest version of the book,则不应遇到此问题。

答案 1 :(得分:0)

使用database_cleaner。您的规范助手将包含以下内容:

config.before(:suite) do
  DatabaseCleaner.strategy = :transaction
  DatabaseCleaner.clean_with :truncation       
end

config.before(:each) do
  ActionMailer::Base.deliveries = []
  DatabaseCleaner.start
end

config.after(:each) do 
  DatabaseCleaner.clean
end

config.after(:all) do
  DatabaseCleaner.clean_with :truncation
end

答案 2 :(得分:0)

似乎问题出在

config.cache_classes = false

我已将此设置为false,假设它确保不使用过时的类数据,但它似乎在其他方面产生相反的效果。将此更改为true修复了我所遇到的所有奇怪现象,但我仍然对此感到困惑。我认为它可能与操作系统有关,就像在教程中所说的那样,OSX(我正在运行)将该行设置为true工作正常,而其他操作系统需要设置为假

答案 3 :(得分:0)

虽然哈特尔的教程让我印象深刻,但你在这里提出的问题可能会被归类为一个重要的遗漏。

这里:RailsTutorial - chapter 8.4.3 - Test database not clearing after adding user in integration test

这是:Rails 3 Tutorial Chapter 11 "Validation failed: Email has already been taken" error

这是:config.cache_classes = false messing up rspec tests?

...是同一问题的所有变种。

迈克哈特尔,如果你在外面,你似乎只有一个问题远离RoR Tutorial完美。

致以最诚挚的问候,

佩里