Ruby on rails rails:如何提供带有gem的模型,以及如何在没有虚拟应用程序的情况下测试rails gem
我已经读过和其他几篇文章,但我找不到如何为模型提供gem 比如说,我想制作一个用于标记的gem(是的,我知道gem,我需要不同的功能)。因此,我希望模型Ruby on rails rails:如何提供带有gem的模型,以及如何在没有虚拟应用程序的情况下测试rails gem,ruby-on-rails,rspec,gem,Ruby On Rails,Rspec,Gem,我已经读过和其他几篇文章,但我找不到如何为模型提供gem 比如说,我想制作一个用于标记的gem(是的,我知道gem,我需要不同的功能)。因此,我希望模型标签捆绑在gem中。我找不到解释这一点的教程 当然,我试图对gem上的acts_as_taggable_进行反向工程,以了解它是如何工作的,但这带来了更多的困惑:我上面提到的教程说,为了测试gem,我应该在gem中安装一个虚拟应用程序。但是,acts__as_taggable_on没有这样的虚拟应用程序!那么它是如何被测试的呢 关于模型:好的,我
标签捆绑在gem中。我找不到解释这一点的教程
当然,我试图对gem上的acts_as_taggable_进行反向工程,以了解它是如何工作的,但这带来了更多的困惑:我上面提到的教程说,为了测试gem,我应该在gem中安装一个虚拟应用程序。但是,acts__as_taggable_on没有这样的虚拟应用程序!那么它是如何被测试的呢
关于模型:好的,我在/tag.rb上看到文件lib/acts\u as\u taggable\u,它似乎是一个tag
模型:
module ActsAsTaggableOn
class Tag < ::ActiveRecord::Base
# ..........................
end
end
因此,我采用了相同的方法(假设我的插件名为dftags):
我添加了文件lib/dftags/tag.rb
:
module Dftags
class Tag < ::ActiveRecord::Base
# attr_accessible :title, :body
end
end
require 'spec_helper'
describe Tag do
let(:tag) { Tag.new(name: "") }
it { should validate_presence_of :name }
end
我有规格标签\u规格rb
:
module Dftags
class Tag < ::ActiveRecord::Base
# attr_accessible :title, :body
end
end
require 'spec_helper'
describe Tag do
let(:tag) { Tag.new(name: "") }
it { should validate_presence_of :name }
end
当我运行bundle exec rspec spec/
时,我得到了错误单位化常量标记(namererror)
看来我错过了一些重要的事情。另外,我还有一个虚拟的应用程序进行测试,但它的行为和标签上的不一样;因此,测试方法应该有所不同
因此,问题是:
- 如何为模型提供gem
- 如果没有虚拟应用程序,我如何测试我的gem
- 有关于编写rails gems的高级文档吗?事实上,我试着去看一个更著名的宝石:,但是作者的ruby-fu和rails-fu太强大了,我无法理解。人们从哪里学到这些
如果没有虚拟应用程序,我如何测试我的gem
虚拟应用程序只是一个助手,它允许您在构建gem/插件时使用正常的rails测试工作流。您可以在没有虚拟应用程序的情况下运行测试,但您需要更多的手动工作
acts\u as\u taggable\u on
几乎是active\u记录
,只有一个助手例外(我一眼就能看出)。因此,作者认为维护虚拟应用程序的开销并不值得,而是手动设置活动记录。看看他是如何建立与数据库的连接的
在rails处理虚拟应用程序时,使用该代码是不必要的
助手也是如此。他没有使用rails提供的测试方法,而是创建了一个包含helper的新类,并使用该类的一个实例来测试它(h/acts as taggable on/blob/master/spec/acts_as taggable_on/tags_helper_spec.rb#L11)。您可能必须描述Dftags::Tag
。@meagar非常感谢您,这很有帮助。我的错。。但关于在没有虚拟应用程序的情况下测试gem的问题仍然存在。