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