【问题标题】:Record persisting past test in Rails3在 Rails3 中记录过去的测试
【发布时间】:2013-08-13 02:00:57
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails-3


    【解决方案1】:

    注意:我是Rails Tutorial 的作者。在 Peter Cooper reported 之后添加了 config.cache_classes = false 行,表示有必要让 RSpec 和 Spork 在他的系统上协同工作。由于我认为没有必要,而且它似乎引入了很多问题(例如在这个线程中确定的问题),所以该行已被删除。如果你使用the latest version of the book,你应该不会遇到这个问题。

    【讨论】:

    • 教程似乎声明使用 spork 是可选的。不知道这是否重要,但我选择不使用 spork 因为我认为它会简化事情。在我的 macbook pro 上,RSpec 和自动测试会在 0-3 秒内产生结果,这对我来说似乎总是足够快。我想一旦我写了足够大的东西来保证优化开发周期,我就会研究 spork。也许这使我成为“少数配置”用户。不确定这是否解释了我在这里遇到了颠簸stackoverflow.com/q/5308307/657003
    • 这正是我最终要做的,因为这是我与你的仓库中的唯一不同之处,尽管我想知道改变这个设置有什么奇怪的地方
    【解决方案2】:

    考虑使用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
    

    【讨论】:

    • RSpec 已经假设在事务中运行所有东西,所以我更困惑为什么它不能与它一起工作
    【解决方案3】:

    看来问题出在线路上

    config.cache_classes = false
    

    我已将此设置为 false 假设它会确保不使用陈旧的类数据,但它似乎在其他方面产生了相反的效果。将其更改为 true 可以解决我遇到的所有奇怪问题,但我仍然对为什么感到困惑。我认为这可能与操作系统有关,正如教程中所说,对于 OSX(我正在运行),将该行设置为 true 可以正常工作,而其他操作系统需要将其设置为 false

    【讨论】:

    • 该行是 config/environments 中 test.rb 文件的一部分
    【解决方案4】:

    虽然 Hartl 的教程给我的印象是完美无缺,但您在这里提出的问题也许可以归类为一个重要的遗漏。

    这里是: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?

    ...都是同一个问题的变体。

    Mike Hartl,如果你在场,你似乎离完美的 RoR 教程只有一个问题。

    最好的问候,

    佩里

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-20
      • 1970-01-01
      • 1970-01-01
      • 2013-01-04
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多