簡體   English   中英

Rails 3.1插件gem,虛擬測試應用程序,rspec

[英]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:

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

現在將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM