2011-12-14 36 views
40

所以Rails的3.1配備了一個鮮爲人知的方便的「軌摹插件新的」發生器,它給你適合軌寶石插件的骨架。 [http://guides.rubyonrails.org/plugins.html#or-generate-a-gemified-plugin]的Rails 3.1的插件寶石,假人的測試應用程序,RSpec的

這樣做的一個有用的事情是設置方便的測試Test :: Unit。它爲您提供了一個基本的虛擬Rails應用程序,您的測試可以在上下文中運行,以測試僅在Rails應用程序的副本中運行的「引擎」行爲。 (它把它放在./test/dummy中)。但是你的測試仍然在my_gem/test中,測試不會'活在虛擬應用程序中。而且,my_gem/test/test_helper.rb在那裏寫成,以便測試將在虛擬應用程序的上下文中運行,並在../dummy/config/environment處引導。

我描述這是因爲我認爲很多人不知道這個新的發電機,這很好地設置了事情。

但我的問題是,有沒有人想出如何使用RSpec做到這一點呢?我試圖遵循相同的原則DIY來爲rspec在rails插件gem中設置這樣的東西,但我遇到了各種令人困惑的障礙,並且希望也許有人已經找到了它(或者有興趣計算它爲我們其他人,嘿)。

回答

93

創建沒有測試單元的插件,並指定爲虛擬應用程序的路徑:

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

添加RSpec的護欄的發展依賴於gemspec文件(foobar.gemspec):

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

運行bundle install

從虛擬應用程序創建一個符號鏈接到插件規範目錄並運行Rspec安裝生成器:

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

現在編輯spec/spec_helper.rb(在軌或spec/rails_helper.rb 4+,不知道老版本)改變這一行(3號線):

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

要這樣:

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

現在你可以從插件的根目錄運行Rspec,它也會從虛擬應用程序中獲取規格。

bundle exec rspec spec 

我更詳細地寫了這個,展示如何還設立了水豚,叉勺和保護在Rails插件與虛擬應用程序:

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

20

剛剛運行rails plugin new <gemname>,然後將rspec作爲development_dependency添加到gemspec文件中,並安裝它rspec --init

現在移動虛擬子文件夾從testspec並將其添加到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

+1

+1 rspec的--init – fotanus 2013-04-30 00:56:32

+3

這對我很好,比其他答案簡單得多 – 2013-05-09 02:05:50

相關問題