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

时间:2012-03-06 16:42:57

标签: ruby-on-rails testing

我发现的很多指南都没有使用捆绑包。

这是我用于测试的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

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

如果宝石作为插件安装,将安装

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

那么,任何人都有任何指导用于使用rails 2.3.x设置带有捆绑器的rspec吗?

4 个答案:

答案 0 :(得分: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
    

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

  3. 安装捆绑包。将bundle update用于Gemfile中已有的任何宝石。

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

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

    将所有商品从spec spec_helper.rb移至prefork块,但以下情况除外:

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

    属于each_run

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

    prefork区块中:

    require 'database_cleaner'
    

    each_run区块中:

    DatabaseCleaner.clean
    
  9. 初始化Guardfile

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

      guard 'rspec', :version => 1, :cli => '--drb --color' do
      
    • 根据您的项目修改Guardfile

  10. 运行rake spec。你应该没有输出(如果你没有测试)。如果您遇到错误,请解决它们。

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

    有问题吗?通过运行spec spec而不是重新运行后卫来更快地重试。

答案 1 :(得分:5)

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

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

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

我认为通用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

执行此操作并运行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

正如你所看到的,黄瓜和rspec发生器实际上都在那里。

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

你不必完全遵循我的版本,我不是一个将特定版本放在Gemfile中的粉丝(但根本没有)但是我们最后在这里做了因为a)我们没有完全理解捆绑,和b)我们需要确保我们获得与导轨2.3兼容的宝石。

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

答案 2 :(得分:0)

生成器不存在的原因是当您运行rails generate ...时,它正在development环境中执行,而这些gem只在test环境中加载。

选项1

将它们添加到developmenttest环境中。

选项2

运行rails generate ... RAILS_ENV=test

(我不肯定这个选项会起作用。)

答案 3 :(得分:0)

在rails 5.1.4中,您可以通过四个简单的步骤来启动和运行RSpec:

group :development, :test do
  gem "database_cleaner"
  gem "rspec-rails"
end
  1. 将以上宝石添加到Gemfile中的:test和:开发组。

  2. 从命令行运行bundle install

  3. 从命令行运行rails generate rspec:install,它将创建以下文件:
  4. 创建.rspec 创建规范 创建spec / spec_helper.rb 创建spec / rails_helper.rb

    1. 配置spec_helper.rb和rails_helper.rb
    2. 您可以查看有关详细信息:https://kolosek.com/rails-rspec-setup