[英]Rails 3.1 plugin gem, dummy test app, rspec
所以Rails 3.1附帶了一個鮮為人知的“rails g plugin new”生成器,它為你提供了一個適合rails gem插件的骨架。 [http://guides.rubyonrails.org/plugins.html#or-generate-a-gemified-plugin]
這樣做的一個有用的事情是為Test :: Unit進行測試設置方便。 它為您提供了一個基本的虛擬Rails應用程序,您的測試可以在上下文中運行,以測試僅在Rails應用程序副本中運行的“引擎”行為。 (它把它放在./test/dummy中)。 但是你的測試仍然在my_gem / test中,測試不會存在於虛擬app中。 並且my_gem / test / test_helper.rb在那里編寫,測試將在虛擬應用程序的上下文中運行,在../dummy/config/environment上啟動。
我之所以這樣描述是因為我認為很多人都不知道這個新的發電機,它可以很好地設置。
但我的問題是,有沒有人想出如何用rspec做這個呢? 我曾嘗試按照相同的原則DIY為rails specing中的rspec設置這樣的東西,但我遇到了各種令人困惑的障礙,我希望也許別人已經弄明白了(或者有興趣搞定它對我們其他人來說,嘿)。
創建沒有測試單元的插件,並指定虛擬應用程序的路徑:
rails plugin new foobar --skip-test-unit --dummy-path=spec/dummy
將rspec-rails添加為gemspec文件( foobar.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
(或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插件中設置capybara,spork和guard:
只需運行rails plugin new <gemname>
,然后將rspec作為development_dependency添加到gemspec文件,並將其安裝到rspec --init
。
現在將dummy子文件夾從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
!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.