所以Rails 3.1附带了一个鲜为人知的"Rails g plugin new"生成器,它为您提供了一个适合Rails gem插件的框架.[http://guides.rubyonrails.org/plugins.html#or-生成-a-gemified-plugin]

它所做的一件有用的事情是,使用Test::Unit方便地设置测试.它为您提供了一个基本的虚拟Rails应用程序,您的测试可以在其上下文中运行,以测试仅在Rails应用程序副本中运行的"引擎"行为.(它把它放进go 了./test/dummy).但是你的测试仍然在我的gem/test中,测试不在虚拟应用中.还有我的gem/test/test助手.rb就在那里,编写的测试将在虚拟应用程序的上下文中运行,在/dummy/config/environment.

我不太了解这台发电机,因为我不太了解它.

但我的问题是,有人知道如何用rspec来代替吗?我曾try 遵循同样的DIY原则,在rails插件gem中为rspec设置类似的设置,但我遇到了各种令人困惑的障碍,我希望可能其他人已经找到了答案(或者有兴趣为我们其他人找到答案,呵呵).

推荐答案

创建不带测试单元的插件,并指定虚拟应用程序的路径:

rails plugin new foobar --skip-test-unit --dummy-path=spec/dummy

将rspec rails作为开发依赖项添加到gempec文件(foobar.gemspec):

Gem::Specification.new do |s|
  .
  .
  .
  s.add_development_dependency "rspec-rails"
end

bundle install

创建一个从虚拟应用到插件规范目录的符号链接,并运行Rspec安装生成器:

cd spec/dummy
ln -s ../../spec
rails generate rspec:install
cd -

现在编辑spec/spec_helper.rb(或rails 4+中的spec/rails_helper.rb,不确定旧版本)更改此行(第3行):

require File.expand_path("../../config/environment", __FILE__)

为此:

require File.expand_path("../dummy/config/environment", __FILE__)

现在,您可以从插件的根目录运行Rspec,它也将从虚拟应用程序中获取规范.

bundle exec rspec spec

我详细介绍了这一点,展示了如何在rails插件中使用虚拟应用程序设置capybara、spork和guard:

https://web.archive.org/web/20130125091106/http://namick.tumblr.com/post/17663752365/how-to-create-a-gemified-plugin-with-rails-3-2-rspec

Ruby-on-rails相关问答推荐

Grape api (rails) - 未初始化常量 Endpoints::TodoAPI (NameError)

Ruby on Rails 身份验证:设计注册不起作用

为什么是 json.partial!使用新的哈希语法传递本地时,jbuiler 模板中的行不执行?

如何为 I18n 设置 raise_on_missing_translations

组合 active_record 模型并按共享属性排序

判断 DateTime 值是今天、明天还是以后

水豚 click_link 与 :href 匹配

具有 has_many 关联的 FactoryGirl build_stubbed 策略

Rails 4 迁移:如何重新排序列

升级到 ruby​​ 1.9.2 后奇怪的无法要求配置/ bootstrap

警告:引用了顶级常量

Rails Rake 任务 - 访问模型类

您将 Rack 中间件文件和要求放在哪里?

获取完整的 rails 控制器名称,包括命名空间

你如何undo撤消Bundle 安装 --without

使用 heroku 和 namecheap 设置自定义域

ActiveModel::MissingAttributeError:无法使用 FactoryGirl 写入未知属性ad_id

将现有的 html.erb 转换为 Haml

Date.current 和 Date.today 有什么区别?

如何从 ApplicationHelper 调用 ApplicationController 方法