【问题标题】:How do I make sure the helpers and models reload in RSpec when I'm using Spork?使用 Spork 时,如何确保在 RSpec 中重新加载助手和模型?
【发布时间】:2012-01-08 08:43:32
【问题描述】:

似乎我的助手(有时是我的模型)在每次使用 Spork 运行时都没有重新加载。我应该在“Spork.each_run”块中添加什么?

【问题讨论】:

    标签: ruby-on-rails rspec helpers rspec-rails spork


    【解决方案1】:

    我从来没有遇到过这些问题,也许是因为我也在使用 Ryan Bates 的 RailsCast 中描述的 Guard gem?

    http://railscasts.com/episodes/285-spork

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,所以我在 each_run 块中设置了这个:

      Spork.each_run do
        # This code will be run each time you run your specs.
        ActiveSupport::Dependencies.clear
        ActiveRecord::Base.instantiate_observers
        FactoryGirl.reload
      
        Dir[File.join(File.dirname(__FILE__), '..', 'app', 'helpers', '*.rb')].each do |file|
          require file
        end
      end
      

      另外,不要在 config/environments/test.rb 中忘记这一点:

      config.cache_classes = !(ENV['DRB'] == 'true')
      

      【讨论】:

      • 这对我有用:我的助手已重新加载。但这会导致控制器测试出现奇怪的失败:Failure/Error: ActiveRecord::StatementInvalid: ArgumentError: prepare called on a closed database: rollback transaction # /Users/josh/.rvm/gems/ruby-1.9.3-p0@iq/gems/sqlite3-1.3.6/lib/sqlite3/database.rb:91:in initialize'`
      • 对我也一样@JoshuaMuheim,你修好了吗?
      【解决方案3】:

      这可能是因为您在 prefork 块中加载了它们。如果你在那里加载东西,你的测试运行得更快,但有时你需要重新加载。您可以加载“each_run”块,但测试会更慢。如果您更喜欢速度,您可以在看到需要重新加载时重新启动 Spork 服务器。这样,prefork 块将再次运行,您的模型和助手将被重新加载。

      【讨论】:

      • 好的,如果我想重新加载一个特定的集合,我只是需要它正常吗?
      • 我想是的,把它放在each_run块里就行了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多