簡體   English   中英

rails:如何使用gem提供模型,以及如何在沒有虛擬app的情況下測試rails gem

[英]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沒有; 所以,測試方法應該是不同的..

所以,問題:

  • 我怎樣才能提供帶寶石的模型?
  • 如何在沒有虛擬應用的情況下測試我的寶石?
  • 是否有一些關於編寫rails gem的高級文檔? 實際上我試圖查看一個更有名的寶石: 裝飾 ,但作者的ruby-fu和rails-fu太強大了,我無法理解它。 人們在哪里學習所有這些?

如何在沒有虛擬應用的情況下測試我的寶石?

虛擬應用程序只是一個幫助程序,允許您在構建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.

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