[英]rails: how to supply a model with gem, and how to test rails gem without dummy app
我已經閱讀了創建Rails插件的基礎知識和其他幾篇文章,但我找不到如何提供帶有gem的模型。
說,我想制作一個標記寶石(是的,我知道acts_as_taggable_on gem,我需要不同的功能)。 所以,我希望將模型Tag
捆綁在gem中。 我發現沒有教程解釋。
當然,我試圖對acts_as_taggable_on gem進行反向工程,以了解它是如何工作的,但它帶來了更多的混亂:我上面提到的教程說我應該在我的gem中有一個虛擬應用程序,以便測試gem。 但是,acts_as_taggable_on沒有這樣的虛擬應用程序! 那怎么測試呢?
關於模型:好的,我看到文件lib/acts_as_taggable_on/tag.rb
似乎是一個Tag
模型:
module ActsAsTaggableOn
class Tag < ::ActiveRecord::Base
# ..........................
end
end
我看到文件lib/acts-as-taggable-on.rb
需要tag
:
require "acts_as_taggable_on/tag"
所以我應用了相同的方法(假設我的插件名為dftags):
我添加了文件lib/dftags/tag.rb
:
module Dftags
class Tag < ::ActiveRecord::Base
# attr_accessible :title, :body
end
end
我的lib/dftags.rb
看起來像這樣:
module Dftags
end
require "dftags/tag"
我有specs tag_spec.rb
:
require 'spec_helper'
describe Tag do
let(:tag) { Tag.new(name: "") }
it { should validate_presence_of :name }
end
當我運行bundle exec rspec spec/
,我得到了錯誤的unitialized constant Tag (NameError)
。
我似乎錯過了重要的事情。 另外,我還有用於測試的虛擬應用程序,但acts_as_taggable_on沒有; 所以,測試方法應該是不同的..
所以,問題:
如何在沒有虛擬應用的情況下測試我的寶石?
虛擬應用程序只是一個幫助程序,允許您在構建gem /插件時使用正常的rails測試工作流程。 您可以在沒有虛擬應用程序的情況下運行測試但是您需要更多的手動工作。
acts_as_taggable_on
幾乎是active_record
只有一個幫助器(我可以快速瀏覽一下)。 因此,作者認為維護虛擬應用程序的開銷不值得付出努力,並且手動設置active_record
。 請參閱https://github.com/mbleigh/acts-as-taggable-on/blob/master/spec/spec_helper.rb#L24他如何建立與數據庫的連接。
使用虛擬應用程序時,此代碼不是必需的,因為rails正在處理它。
助手也是如此。 他沒有使用rails提供的測試方法,而是創建了一個包含幫助程序的新類,並使用該類的實例對其進行測試(h / acts-as-taggable-on / blob / master / spec / acts_as_taggable_on / tags_helper_spec.rb #L11)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.