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