【问题标题】:Rails 3.1 RC5 Mountable Engine testing with Spork使用 Spork 进行 Rails 3.1 RC5 可安装引擎测试
【发布时间】:2011-08-15 23:58:39
【问题描述】:

我已经能够让 RSpec、Cucumber 和 Autotest 与我的 Rails 3.1 Mountable Engine 一起工作。事情失败的地方是试图将Spork整合到组合中。 Spork 运行良好,我的测试使用了 Spork,但我遇到的问题是,除非我关闭效率不高的 Spork 服务器,否则 Spork 不会重新加载模型。我也在使用 factory_girl 。我使用Spork.trap_method 尝试了各种方法,但没有任何效果。

这是我正在使用的 gem(尽管我已经在我的项目中放弃了 Spork,因为它给我带来了悲伤):

  • 导轨 (3.1.0.rc5)
  • spork (0.9.0.rc9)
  • rspec (2.6.0)
  • rspec-core (2.6.4)
  • rspec-expectations (2.6.0)
  • rspec 模拟 (2.6.0)
  • rspec-rails (2.6.1)
  • factory_girl (2.0.3)
  • factory_girl_rails (1.1.0)
  • 黄瓜 (1.0.2)
  • 黄瓜导轨 (1.0.2)

谢谢,

-达米恩

【问题讨论】:

  • 你是如何为 rspec 设置测试的?我无法让它工作......在rails 3.1上
  • 查看this post 获取RSpec 和this gist 获取Cucumber

标签: rspec2 ruby-on-rails-3.1 spork


【解决方案1】:

我发现了我的问题。它实际上是 Autotest 而不是 Spork。我已经从可安装引擎转移到标准引擎(插件),因为它最终更适合我的需要。

我现在使用的是 Rails 3.1 的发布版本。

在这种情况下,我认为事情会更容易,但我遇到了同样的问题。无论如何,这最终成为了测试非命名空间引擎(可挂载)的解决方案,尽管通过一些路径调整,我相信它会起作用。

使用以下内容将 .autotest 文件添加到项目的根目录:

Autotest.add_hook :initialize do |at|
  at.add_mapping %r%^app/models/(.*)\.rb$% do |_, m|
    "spec/models/#{m[1]}_spec.rb"
  end

  at.add_mapping %r%^app/controllers/(.*)\.rb$% do |_, m|
    ["spec/controllers/#{m[1]}_spec.rb",
    "spec/functional/#{m[1]}_spec.rb"]
  end

  at.add_mapping %r%^app/helpers/(.*)_helper.rb% do |_, m|
    ["spec/views/#{m[1]}_view_spec.rb",
    "spec/functional/#{m[1]}_controller_spec.rb"]
  end

  at.add_mapping %r%^app/views/(.*)/% do |_, m|
    ["spec/views/#{m[1]}_view_spec.rb",
    "spec/functional/#{m[1]}_controller_spec.rb"]
  end
end

当我在另一个问题上遇到这个答案时,我想出了解决方案:how to tell autotest to correctly track changes in app source?,以及在网络上找到的其他示例。

希望这对其他人有所帮助。

[编辑 2011-09-20] 用“hack”修复了 Cucumber/Spork 问题。在 Spork.each_run 块中,我强制重新加载模型和控制器,如下所示:

  ENGINE_ROOT=File.join(File.dirname(__FILE__), '../../')
  # Couldn't get spork to reload models, hence the reason for this hack
  Dir[File.join(ENGINE_ROOT, "app/models/*.rb")].each {|f| load f }
  # or controllers...
  Dir[File.join(ENGINE_ROOT, "app/controllers/*.rb")].each {|f| load f }

看来应该有更好的办法……

【讨论】:

  • 好的,这就结束了。它适用于 RSpec,但不适用于 Cucumber 功能。仍在寻找完整的解决方案,但至少 RSpec 可以正常工作!
猜你喜欢
  • 2011-11-19
  • 1970-01-01
  • 2013-09-14
  • 2011-11-17
  • 1970-01-01
  • 2012-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多