如何使用rails 2.3.8和bundler设置rspec?

Nul*_*uli 3 testing ruby-on-rails

我发现很多指南都没有使用捆绑器.

这是我用于测试的gemfile的一部分:

group :test do
    gem "cucumber"
    gem "cucumber-rails"
    gem "launchy"
    gem "hpricot"
    gem "gherkin"

    gem "capybara"
    gem "rspec"
    gem "rack"
    gem "rspec-rails"

    gem "webrat"
    gem "database_cleaner"

    gem "factory_girl"
    gem "shoulda", :require => nil
    gem "shoulda-matchers", :git => "https://github.com/thoughtbot/shoulda-matchers"
    gem "cobravsmongoose"

    gem "rcov"
    gem "ZenTest"
    gem "autotest-growl"
    gem "inherited_resources", "1.0.2"
    gem "responders", "0.4.2"
end
Run Code Online (Sandbox Code Playgroud)

但即使如此,发电机也从未存在过.这样做:脚本/生成rspec不起作用,(找不到rspec)生成器

如果宝石作为插件安装,将安装生成器......但我认为这只会给应用程序增加膨胀,不同的宝石在不同的操作系统上编译不同.

那么,任何人都有任何指南用于使用带有rails 2.3.x的bundler设置rspec吗?

Edw*_*son 8

在Rails 2项目上设置RSpec,Guard和Spork

我现在已经做过几次了; 希望这对需要维护Rails 2.3应用程序的任何人都有帮助.这对我曾经使用过的应用程序非常有用,但我欢迎其他人提出其他建议.

本指南假设Bundler上有一个Rails 2.3.x项目

  1. 摆脱项目中的任何旧的rspec插件(如果有的话).RSpec位可能隐藏在:
    • Rake文件
    • LIB /任务/ rspec.rake
    • 供应商/插件/ rspec的
    • (你能找到的任何其他东西)
  2. RSpec 2与Rails 2不兼容; 使用RSpec 1(docs).将最新的兼容gem版本放入Gemfile:

    group :test, :development do
      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
    end
    
    Run Code Online (Sandbox Code Playgroud)

    这些:require => false选项是可选的,但如果它不需要在SpecHelper.rb需要时加载测试库,它可以帮助应用程序在开发中更快地启动.

  3. 安装捆绑包.使用bundle update对于已经在你的Gemfile任何宝石.

  4. 确保lib/tasks/rspec.rake和spec/spec_helper.rb不存在.
  5. script/generate rspec
  6. 删除config.gem添加到config/environments/test.rb的行; 该应用程序使用bundler.
  7. spork --bootstrap

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

    将所有东西从库存spec_helper.rb移动到prefork块中,除了:

    Dir[File.expand_path(File.join(File.dirname(__FILE__),'support','**','*.rb'))].each {|f| require f}
    
    Run Code Online (Sandbox Code Playgroud)

    属于each_run.

  8. 安装database_cleaner.在spec/spec_helper.rb中,

    prefork块中:

    require 'database_cleaner'
    
    Run Code Online (Sandbox Code Playgroud)

    each_run块中:

    DatabaseCleaner.clean
    
    Run Code Online (Sandbox Code Playgroud)
  9. 初始化Guardfile

    • guard init spork
    • guard init rspec
    • 修改Guardfile的rspec guard以使用正确的版本和drb(spork):

      guard 'rspec', :version => 1, :cli => '--drb --color' do
      
      Run Code Online (Sandbox Code Playgroud)
    • 根据您的项目修改Guardfile

  10. rake spec.你应该没有输出(如果你没有测试).如果出现错误,请解决它们.

  11. guard.没有错误?太棒了,试试吧!

    问题?通过运行spec spec而不是重新运行后卫来更快地再试一次.


nzi*_*nab 5

我们仍然在rails 2.3.8上有一个应用程序,但我们更新它使用bundler(Gemfile),它也有rspec和黄瓜工作.

确保按照捆绑包指南使您的应用程序正确使用Gemfile的gem加载而不是Rails的默认值:http://gembundler.com/rails23.html

获得preinitializer.rb并更改config/boot.rb正常工作后,您可能需要确保使用正确版本的rspec和cucumber.

我认为只有那个泛型gem 'rspec-rails'可能会尝试为你安装rspec 2,但这只适用于Rails 3(我相信),所以你可能需要专门告诉它使用rspec 1.x.

我们的测试组看起来像这样(虽然我认为其中一些宝石可能比他们需要的更旧,但是我们已经更新它们已经有一段时间了,因为应用程序的rails 3升级正在等待我们不太担心什么它现在看起来像):

group :test, :cucumber do
  gem 'autotest-fsevent'
  gem 'test-unit', '~>1.2.3'
  gem "hoe", "1.5.1"
  gem 'autotest-rails', '4.1.0'
  gem 'rspec', '1.3.2'
  gem 'rspec-rails', '1.3.4'
  gem 'cucumber', '0.10.0'#, '0.9.0'
  # Change this shinanigans to 0.4.0 when it gets released ;)
  gem 'cucumber-rails', '0.3.2'
  gem 'database_cleaner', '0.5.2'
  gem 'capybara', '0.3.9'
  gem 'launchy'
  gem 'dupe', '0.5.1'
  gem 'factory_girl', '1.2.4'
  gem 'email_spec', '~>0.6.2', :require => false
end
Run Code Online (Sandbox Code Playgroud)

执行此操作并运行后bundle install,我可以script/generate --help在输出中键入包含此命令的命令:

Installed Generators
  Rubygems: business_time_config, cucumber, culerity, dupe, email_spec, feature, integration_spec, paperclip, rspec, rspec_controller, rspec_model, rspec_scaffold
  Builtin: controller, helper, integration_test, mailer, metal, migration, model, observer, performance_test, plugin, resource, scaffold, session_migration
Run Code Online (Sandbox Code Playgroud)

如您所见,黄瓜和rspec发生器实际上在那里可用.

我认为您的问题可能是它正在安装的rspec版本.如果它正在安装rspec版本2,那么它与rails 3相关联,它以不同的方式处理gems中的生成器我相信(我相信它们必须放在不同的目录结构中).这可能就是你的rails 2.3.x应用程序没有看到它们的原因.

你不必完全按照我的版本,我不是一个粉丝(根本没有)把特定版本放在Gemfile中,但是我们最后在这里做了因为a)我们没有完全理解bundler,并且b)我们需要确保我们获得与rails 2.3兼容的宝石.

希望这有帮助!如果您有疑问,请告诉我.