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吗?
我现在已经做过几次了; 希望这对需要维护Rails 2.3应用程序的任何人都有帮助.这对我曾经使用过的应用程序非常有用,但我欢迎其他人提出其他建议.
本指南假设Bundler上有一个Rails 2.3.x项目
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需要时加载测试库,它可以帮助应用程序在开发中更快地启动.
安装捆绑包.使用bundle update
对于已经在你的Gemfile任何宝石.
script/generate rspec
config.gem
添加到config/environments/test.rb的行; 该应用程序使用bundler.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
.
安装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)初始化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
跑rake spec
.你应该没有输出(如果你没有测试).如果出现错误,请解决它们.
跑guard
.没有错误?太棒了,试试吧!
问题?通过运行spec spec
而不是重新运行后卫来更快地再试一次.
我们仍然在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兼容的宝石.
希望这有帮助!如果您有疑问,请告诉我.
归档时间: |
|
查看次数: |
1777 次 |
最近记录: |