Rails 3.1插件gem,虚拟testing应用程序,rspec

所以Rails 3.1带有一个不为人知的方便的“rails g插件新”生成器,它为您提供了一个适合rails gem插件的框架。 [http://guides.rubyonrails.org/plugins.html#or-generate-a-gemified-plugin]

这样做的一个有用的东西是设置方便的Test :: Unittesting。 它为您提供了一个基本的虚拟Rails应用程序,您的testing可以在上下文中运行,以testing仅在Rails应用程序的副本中运行的“引擎”行为。 (它把它放在./test/dummy)。 但是你的testing仍然在my_gem / test中,testing不会在虚拟应用中。 而且,my_gem / test / test_helper.rb在那里写,这样testing将在虚拟应用程序的上下文中运行,在../dummy/config/environment处引导。

我之所以这样描述,是因为我认为很多人不知道这个新的发电机,这个发电机的设置非常好。

但是我的问题是,有没有人想出如何用rspec来做到这一点呢? 我试图遵循相同的原则DIY来设置这样的事情,在一个轨道插件gemrspec,但我遇到了各种混乱的路障,并希望也许别人已经find了它(或将有兴趣计算它为了我们其他人,嘿)。

创build不带testing单元的插件并指定虚拟应用程序的path:

rails plugin new foobar --skip-test-unit --dummy-path=spec/dummy 

将rspec-rails作为开发依赖添加到gemspec文件( foobar.gemspec )中:

 Gem::Specification.new do |s| . . . s.add_development_dependency "rspec-rails" end 

运行bundle install

从虚拟应用程序创build一个符号链接到插件规范目录并运行Rspec安装生成器:

 cd spec/dummy ln -s ../../spec rails generate rspec:install cd - 

现在编辑spec/spec_helper.rb (或者rails 4+中的spec/rails_helper.rb ,不确定旧版本)更改这一行(第3行):

 require File.expand_path("../../config/environment", __FILE__) 

对此:

 require File.expand_path("../dummy/config/environment", __FILE__) 

现在,您可以从插件的根目录运行Rspec,并从虚拟应用程序中获取规格。

 bundle exec rspec spec 

我更详细地写了这个,展示了如何在一个虚拟应用程序的rails插件中设置水豚,spork和guard:

https://web.archive.org/web/20130125091106/http://namick.tumblr.com/post/17663752365/how-to-create-a-gemified-plugin-with-rails-3-2-rspec

只需运行rails plugin new <gemname> ,然后将rspec作为development_dependency添加到gemspec文件,然后安装rspec --init

现在将虚拟子文件夹从test移到spec并将其添加到spec_helper

 ENV["RAILS_ENV"] = "test" require File.expand_path("../dummy/config/environment.rb", __FILE__) require "rails/test_help" require '<gemname>' Rails.backtrace_cleaner.remove_silencers! 

因为他们在test_helper