【问题标题】:Guard Rspec Spork Rails 2 not startingGuard Rspec Spork Rails 2 未启动
【发布时间】:2013-03-07 11:15:35
【问题描述】:

我在 ruby-1.9.2-p180 上运行 rails 2.3.14

我正在努力让守卫 rspec 继续前进。

我安装了相关的gem,这里是我的文件内容,Gemfile、/spec/spec_helper.rb和Guardfile


宝石文件

group :test, :development do
  gem 'rspec-rails', '~> 1.3.2', :require => false
  gem 'simplecov', :require => false
end

group :test do
  gem 'test-unit', '1.2.3', :require => false # for rspec
  gem 'rspec', '~> 1.3.2', '~> 1.2', :require => false
  gem 'guard', :require => false
  gem 'rb-inotify', '~> 0.9', :require => false
  gem 'spork', '~> 0.8', :require => false
  gem 'guard-rspec', :require => false
  gem 'guard-spork', :require => false
  gem 'growl', :require => false      # notifications; optional
  gem 'listen', '>= 0.5.1', :require => false
  gem 'machinist', '~> 2.0', :require => false
  gem 'database_cleaner', '~> 0.9.1', :require => false
end

spec_helper.rb

require 'rubygems'
require 'spork'

Spork.prefork do
  ENV["RAILS_ENV"] ||= 'test'
  require File.expand_path(File.join(File.dirname(__FILE__),'..','config','environment'))
  require 'spec/autorun'
  require 'spec/rails'
end

Spork.each_run do
  Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
end

Spec::Runner.configure do |config|  
  config.use_transactional_fixtures = true
  config.use_instantiated_fixtures  = false
  config.fixture_path = RAILS_ROOT + '/spec/fixtures/'
end

保护文件

# A sample Guardfile
# More info at https://github.com/guard/guard#readme

guard 'spork', :cucumber_env => { 'RAILS_ENV' => 'test' }, :rspec_env => { 'RAILS_ENV' => 'test' } do
  watch('config/application.rb')
  watch('config/environment.rb')
  watch('config/environments/test.rb')
  watch(%r{^config/initializers/.+\.rb$})
  watch('Gemfile')
  watch('Gemfile.lock')
  watch('spec/spec_helper.rb') { :rspec }
  watch('test/test_helper.rb') { :test_unit }
  watch(%r{features/support/}) { :cucumber }
end

guard 'rspec', :version => 1 do
  watch(%r{^spec/.+_spec\.rb$})
  watch(%r{^lib/(.+)\.rb$})     { |m| "spec/lib/#{m[1]}_spec.rb" }
  watch('spec/spec_helper.rb')  { "spec" }

  # Rails example
  watch(%r{^app/(.+)\.rb$})                           { |m| "spec/#{m[1]}_spec.rb" }
  watch(%r{^app/(.*)(\.erb|\.haml)$})                 { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
  watch(%r{^app/controllers/(.+)_(controller)\.rb$})  { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
  watch(%r{^spec/support/(.+)\.rb$})                  { "spec" }
  watch('config/routes.rb')                           { "spec/routing" }
  watch('app/controllers/application_controller.rb')  { "spec/controllers" }

  # Capybara request specs
  watch(%r{^app/views/(.+)/.*\.(erb|haml)$})          { |m| "spec/requests/#{m[1]}_spec.rb" }

  # Turnip features and steps
  watch(%r{^spec/acceptance/(.+)\.feature$})
  watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$})   { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
end


当我跑

耙规格

效果很好


但是当我跑步时

守卫

它告诉我这个错误

13:04:24 - INFO - Guard uses NotifySend to send notifications.
13:04:24 - INFO - Guard uses TerminalTitle to send notifications.
13:04:24 - INFO - Starting Spork for RSpec
Using RSpec
Preloading Rails environment
no such file to load -- /home/francois/sites/easylodge/config/application (LoadError)

更新

当我在 Guardfile 中将此部分注释掉时,它看起来启动正常

# guard 'spork', :cucumber_env => { 'RAILS_ENV' => 'test' }, :rspec_env => { 'RAILS_ENV' => 'test' } do
#   watch('config/application.rb')
#   watch('config/environment.rb')
#   watch('config/environments/test.rb')
#   watch(%r{^config/initializers/.+\.rb$})
#   watch('Gemfile')
#   watch('Gemfile.lock')
#   watch('spec/spec_helper.rb') { :rspec }
#   watch('test/test_helper.rb') { :test_unit }
#   watch(%r{features/support/}) { :cucumber }
# end

控制台结果

13:17:01 - INFO - Guard uses NotifySend to send notifications.
13:17:01 - INFO - Guard uses TerminalTitle to send notifications.
13:17:01 - INFO - Guard::RSpec is running, with RSpec 1!
13:17:01 - INFO - Running all specs
13:17:07 - INFO - Guard is now watching at '/home/francois/sites/easylodge'

【问题讨论】:

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


    【解决方案1】:

    gemfile 中的版本错误:/

    新的宝石文件

    group :test, :development do
      gem 'rspec-rails', '~> 1.2', :require => false
      gem 'simplecov', :require => false
    end
    
    group :test do
      gem 'test-unit', '1.2.3', :require => false # for rspec
      gem 'rspec', '~> 1.2', :require => false
      gem 'guard', :require => false
      gem 'spork', '~> 0.8.0', :require => false
      gem 'guard-rspec', :require => false
      gem 'guard-spork', :require => false
      gem 'growl', :require => false      # notifications; optional
      gem 'listen', '>= 0.5.1', :require => false
      gem 'machinist', '~> 2.0', :require => false
      gem 'database_cleaner', '~> 0.9.1', :require => false
    end
    


    感谢这篇文章

    在 Rails 2 项目中设置 RSpec、Guard 和 Spork

    我已经做过几次了;希望这对需要维护 Rails 2.3 应用程序的人有所帮助。这对我所开发的应用程序非常有效,但我欢迎其他人提出其他步骤的建议。

    本指南假定在 Bundler

    上有一个 Rails 2.3.x 项目 摆脱项目中的任何旧 rspec 插件(如果有)。 RSpec 位可能隐藏在:

    • 耙文件
    • lib/tasks/rspec.rake
    • 供应商/插件/rspec
    • (您能找到的任何其他内容)


    RSpec 2 与 Rails 2 不兼容;使用 RSpec 1(文档)。将最新的兼容 gem 版本放入您的 Gemfile:

    gem 'test-unit', '1.2.3', :require => false # for rspec
    gem 'rspec', '~> 1.2', :require => false
    gem 'rspec-rails', '~> 1.2', :require => false
    gem 'guard', :require => false
    gem 'spork', '~> 0.8.0', :require => false
    gem 'guard-rspec', :require => false
    gem 'guard-spork', :require => false
    gem 'growl', :require => false      # notifications; optional
    gem 'rb-fsevent', :require => false # for OSX; optional
    gem 'listen', '>= 0.5.1', :require => false
    gem 'machinist', '~> 2.0', :require => false
    gem 'database_cleaner', '~> 0.9.1', :require => false
    

    安装包。

    对 Gemfile 中已有的所有 Gem 使用捆绑更新。

    确保
    lib/tasks/rspec.rake
    spec/spec_helper.rb 不存在。

    ./script/generate rspec
    



    删除添加到 config/environments/test.rb 的 config.gem 行;该应用程序使用捆绑器。

    spork --bootstrap
    

    然后编辑 spec/spec_helper.rb 并按照说明进行操作。

    将库存 spec_helper.rb 中的所有内容移到 prefork 块中,

    except:Dir[File.expand_path(File.join(File.dirname(__FILE__),'support','**','*.rb'))].each {|f| require f}
    

    属于each_run。

    安装 database_cleaner。在 spec/spec_helper.rb 中, 在 prefork 块中:require 'database_cleaner' 在 each_run 块中:DatabaseCleaner.clean

    初始化保护文件

    guard init spork
    
    guard init rspec
    

    修改 Guardfile 的 rspec 保护以使用正确的版本和 drb (spork):

    guard 'rspec', :version => 1, :cli => '--drb --color' do
    


    根据您的项目修改 Guardfile 运行 rake 规范。您应该没有输出(如果您没有测试)。如果您遇到错误,请解决它们。

    跑卫。没有错误?太好了,测试一下!
    问题?通过运行规范规范而不是重新运行守卫来更快地重试。

    【讨论】:

      猜你喜欢
      • 2011-12-31
      • 2013-09-20
      • 2012-05-27
      • 1970-01-01
      • 1970-01-01
      • 2011-12-11
      • 1970-01-01
      • 2013-01-13
      • 2012-04-30
      相关资源
      最近更新 更多