Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails:如何提供带有gem的模型,以及如何在没有虚拟应用程序的情况下测试rails gem_Ruby On Rails_Rspec_Gem - Fatal编程技术网

Ruby on rails rails:如何提供带有gem的模型,以及如何在没有虚拟应用程序的情况下测试rails 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(是的,我知道gem,我需要不同的功能)。因此,我希望模型
标签
捆绑在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的问题仍然存在。