如何使用 RSpec 针对真实应用程序开发 Rails3 引擎?

2024-01-09

关于引擎开发以及使用虚拟应用程序进行测试的文章已经有很多。

在我们的例子中,我们开发的引擎不是独立的实体,而是依赖于真实的 Rails 3 应用程序。我们仍然希望此代码存在于引擎中,而不是成为应用程序的一部分,因为引擎的工作是从拥有自己的表和模型映射的遗留系统导入数据,我们希望最终再次删除它。

旧的遗留表和新模式之间的数据映射很复杂,我们希望对引擎进行 TDD(使用 rspec)。

  • 我已经关注了Jose Valim 所著《Crafting Rails 应用程序》 http://www.pragprog.com/titles/jvrails/我正在使用引擎宝石 https://github.com/josevalim/enginex.
  • 我已经更换了/spec/dummy_app有一个 git 子模块指向真正的 Rails 3 应用程序。
  • 我在从引擎加载模型时遇到问题(未定义的符号错误),因为真正的应用程序的 Gemfile 没有指向引擎,而且我也无法修改config/application.rb,需要引擎(这就是虚拟应用程序的作用,如本书第 15-16 页所述)。
  • 我包括了引擎的lib文件夹放入加载路径$: in spec_helper并且路径可用。
  • require into spec_helper.rb没有解决问题。
  • 我想知道是否有一个内部 Rails API(或一个聪明的猴子补丁)可以连接到真实应用程序的启动序列并需要引擎,而无需修改真实应用程序的代码(因为它位于子模块中)。
  • 我不确定的另一个问题是我有 2 个 Gemfile(一个在引擎中,一个在应用程序中),当引擎处于活动状态时,它们都应该被使用。

想法?


所以,现在我已经开始工作了,我想出了一些事情并将回答我自己的问题。

为简单起见,我将把 gem 的名称称为“my_gem”和“MyGem”:

In the engine.rb文件中,我添加了:

require 'my_gem'
require 'rails'

这修复了以下类型的错误:

my_gem/lib/my_gem/engine.rb:2: uninitialized constant MyGem::Rails (NameError)

In spec_helper.rb,我在上面添加了:

require 'bundler/setup'
require 'my_gem'

这是为了确保 Bundler 立即初始化,而不是通过应用程序初始化。这样我就可以在此处加载 MyGem,并将其挂接到应用程序的初始化序列中。这修复了NameError引擎模型类的例外。

这就留下了一个问题:Gemfile使用。问题是我的应用程序有自己的 gemfile,并且 gem/engine 需要它自己的独立依赖项Gemfile.

我找不到任何 Bundler 传递两个 APIGemfile对此,事实上 Bundler 似乎是围绕单一权威的假设构建的Gemfile。所以我生成一个spec_helper。我获取应用程序的 gemfile 并附加gemspec它指向 GemSpec 格式的 gem 依赖关系。 (关于提示gemspec顺便说一句,何塞·瓦利姆(Jose Valim)的书中缺失了)。

我不知道是否有比在测试启动期间连接文件更好的方法。如果您知道其中之一,请回复。

有用的资源有:

  • 澄清 .gemspec 和 Gemfile 的角色 http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/通过耶胡达·卡茨
  • gemspec 的捆绑器文档 http://gembundler.com/rubygems.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 RSpec 针对真实应用程序开发 Rails3 引擎? 的相关文章

  • 从父应用程序重新打开 Rails 3 引擎类

    就目前而言 您无法重新打开引擎中包含的引擎类 app只需在父应用程序的目录中添加相同的类即可 app目录 例如 my engine app controllers users controller rb my app app control
  • 为 RoR 中的每个用户创建新的 URL 路径

    如何在 Ruby on Rails 中实时创建新的 URL 路径 例如 我希望我的用户拥有 name XXX com 或 XXX com name 仅供参考 我在 Heroku 上托管代码 看看 subdomain fu 插件 https
  • ruby rspec 不能与 simplecov 一起使用

    我安装了 simplecov gem 并添加了 require simplecov SimpleCov start 到spec helper rb文件 现在如果我在some file spec rb文件中包含spec helper rb并尝
  • 使用“ember-rails”将路由从 Rails 迁移到现有 Rails 应用程序的 Ember

    将 gem ember rails 用于现有的 Rails 应用程序 我正在尝试使用 Ember 路由一个资源 很多人告诉我这段代码应该可以工作 但事实并非如此 我想突破学习曲线并使这项工作成功 但我需要一些帮助 Error Routing
  • 在rails中,如何在要求升级帐户之前限制用户在数据库中保存的帖子数量

    我添加了一种控制非订阅用户和订阅用户的小方法 基本上我的想法是所有使用 Devise 注册的用户都会获得一个帐户 但是 我的模型或根据找到的用户 ID 在数据库中存储的用户可以拥有的帖子数量应该是 25 个帖子 我猜下面的方法会起作用 Mo
  • Rails 生产“CSS 未预编译”

    我已经在我的 Leopard 网络服务器上使用生产环境在姊妹 Rails 3 1 应用程序上完成了此操作 所以我没想到部署这个应用程序会如此失败 我已经让 Passenger 识别出该应用程序 但我在 apache 中收到 GET miss
  • 使用 ActiveRecord::Relation 时的 RSpec 匹配器

    所以这是我要测试的方法 def self by letter letter where lastname LIKE letter order lastname end 简单问一下 letter 后面的百分号到底有什么作用 跟格式化有关系吗
  • 如何使用 RSpec 测试 javascript 重定向?

    我正在使用 xhr post 与控制器交互 并且我期待重定向 在 js erb 中 我有 window location href address 手动测试 浏览器会正确重定向 我如何使用 RSpec 测试它 response should
  • factory_girl + rspec 似乎并没有在每个示例后回滚更改

    类似于这里描述的问题 http rpheath com posts 411 how to use factory girl with rspec http rpheath com posts 411 how to use factory g
  • Rails Structure.sql 和 schema.rb 之间有什么区别

    我知道 schema rb 文件是一个 ruby 文件 它是在运行 rake 迁移时创建和修改的 但是 Structure sql 呢 我在一些项目中看到了 schema rb 在其他项目中看到了 Structure sql 以及在一些这两
  • Rails current_path 助手?

    我正在开发具有以下路由条件的 Rails 3 2 应用程序 scope locale locale de en do resources categories only index show get newest index as newe
  • 将回形针 url 添加到 json

    通常在 html 中 我们会在图像标签内使用 Model field url thumb 如何在 json 上执行此操作 尤其是使用 hash secret 如果这对任何人都有帮助 我找到了一个很好的方法来做到这一点 class MyMod
  • Capybara::ElementNotFound:无法找到字段“标题”

    我无法解决这个问题 请帮我 它给了我找不到元素的错误 规格 功能 todos create spec rb require spec helper describe Creating todos do let user FactoryGir
  • 我可以使用 Rails API 执行 INSERT-SELECT 操作吗?

    我必须将一个表中的 BLOB 字段复制到另一个表中 并且我想使用 INSERT SELECT 查询来实现此目的 INSERT INTO target table key data comment SELECT my key data som
  • Rails:包括外部 JavaScript

    我想使用 JavaScript 库 例如 jQuery 插件 我是否使用 Rails 资产管道 或者我应该将其包含在 javascript include tag 中 我有哪些选择以及推荐的做法是什么 您会仅在几个页面上还是在整个应用程序中
  • 按共同关联的数量排序 (Rails)

    背景 我有帖子和用户 并且都有很多社区 客观的 对于任何给定的用户 我想返回一个帖子集合 按该帖子与该用户有共同社区的数量排序 具有更多共同社区的帖子位于更高的位置 我当前的尝试 使用排序方法 有效 Post includes commun
  • 解析包含 json 字符串的 json

    我有一个 json 里面有另一个 json 但它在双引号内 因此它给了我一个解析错误 除了使用之外还有什么方法可以解析这个jsongsub替换双引号 obj Name FirstName Douglas LastName Crockford
  • YouTube 视频出现 Phantom JS 错误

    Phantom JS 版本 1 9 1 恶作剧版本 1 3 0 从今天开始 YouTube 嵌入视频在运行 javascript 测试时会出现 poltergeist 错误 我的 YouTube 代码只是默认的嵌入 YouTube 代码 这
  • Rails 3:用户创建自定义表单?

    我正在尝试思考如何允许用户创建具有所有字段类型的自定义表单 如果有一颗宝石那就太好了 但我似乎无法在任何地方找到它 所以我有一个像这样的数据库设置 t integer form id t string name t string hint
  • 如何在控制器中获取f.submit的名称参数?

    我创建了 form html erb 其中的编码如下 是的 我确实有两个相同表单的提交 并且它们都有 更新 和 销毁 等名称 当用户按下销毁按钮时 books controller 中的更新操作将被调用 并判断是 更新 还是 销

随机推荐

  • React:访问React内部操作队列

    React 收集操作 https reactjs org docs implementation notes html updating host components 就像 ADD REPLACE REMOVE 等 DOM 操作一样 这样
  • 如何使用最新的 Facebook sdk 从 iOS 中的 Facebook API 获取用户的生日?

    如何使用最新的 Facebook sdk 从 iOS 中的 Facebook API 获取用户的生日 我尝试去获取它 fields id name link first name last name picture type large e
  • 如何从 Java 代码更新 Jenkins config.xml?

    我是 Jenkins 插件开发的新手 所以如果问题很愚蠢 请原谅我 我目前正在开发一个 Jenkins 插件 它提供了一个非常小的配置选项列表 如所附屏幕截图所示 该表单是使用 Jelly 脚本设计的 我必须从我的 Java 代码更新作业的
  • Tensorflow 中的 zip 之类的函数? Tensorflow张量运算

    我的问题是关于 Tensorflow 中的张量运算 比方说 import tensorflow as tf import numpy as np a tf Variable np random random 10 3 3 b tf Vari
  • Javascript d3:有没有办法以编程方式停止拖动项目?

    当我单击并拖动项目时 有没有办法在不松开鼠标按钮的情况下强制使其停止可拖动 例如 如果我将一个项目拖过某个边界框 我可以让它放开所拖动的项目吗 jsfiddle 示例 http jsfiddle net typeofgraphic Ne8h
  • 在 Sublime Text 中编写查找和替换操作脚本

    我经常发现自己在文件中执行重复的文件和替换操作 最常见的是fixed查找和替换操作 删除一些行 更改一些始终相同的字符串等等 在 Vim 中这是理所当然的 function Modify Strength Files execute s e
  • 使用 ProGuard 和 Firebase Auth 进行 Flutter 构建崩溃

    我跟着有关将 ProGuard 添加到 Flutter 的说明 https flutter io android release step 1 configure proguard现在在启动应用程序时看到此异常 java lang NoCl
  • 硒下载文件

    我正在尝试制作一个 Selenium 程序来自动下载和上传一些文件 请注意 我这样做不是为了测试 而是为了尝试自动化某些任务 这是我对 Firefox 配置文件的 set preference profile set preference
  • ASP.NET MVC 2.0 JsonRequestBehavior 全局设置

    默认情况下 当操作尝试返回 JSON 以响应 GET 请求时 ASP NET MVC 2 0 现在将引发异常 我知道这可以通过使用 JsonRequestBehavior AllowGet 逐个方法地覆盖 但是是否可以在控制器或更高的基础上
  • .htaccess 将 https 重定向到 http 不起作用

    我正在尝试捕获到我的网站前面的任何 https 流量 因此 https www domain com 被重定向到 http www domain com 然而 其他子域需要重定向到其他地方 在大多数情况下 除了 https gt http
  • 域名指向单个页面

    我试图将域名指向单个页面 并保持域名相同 无重定向 因此 如果用户输入 www domain1 com au gt 将显示原始站点 如果用户输入 www domain2 com au gt 他们会显示 www domain1 com au
  • ubuntu:sem_timedwait 未唤醒 (C)

    我有3个进程需要同步 进程一执行某项操作 然后唤醒进程二并休眠 进程二执行某项操作 然后唤醒进程三并休眠 进程三执行某项操作 唤醒进程一并休眠 整个循环定时运行在 25hz 左右 由于在我的 真实 应用程序中触发进程二之前 外部同步到进程一
  • 使用CodeIgniter从mysql数据库中随机记录

    我在互联网上进行了研究 但找不到任何东西 我有一个 mysql 数据库 并在一个表中记录 我需要在每次页面加载时从该表中获取随机记录 我怎样才能做到这一点 有什么功能吗 欣赏 谢谢 已排序 关联 http www derekallard c
  • 在 Python 或 C++ 中单声道播放 Mp3

    我正在编码音乐播放器 https github com fabiomdiniz Gokya 2 The Super Gokya 在 python 中使用 pyqt 我希望它能够单声道播放 mp3 文件 我已经使用 pygame 完成了这一点
  • SQL 中的日期范围交集分割

    我有一个 SQL Server 2005 数据库 其中包含一个名为 成员资格 的表 表架构为 PersonID int Surname nvarchar 30 FirstName nvarchar 30 Description nvarch
  • 强制自动启动计算机?

    我们知道如何使用 Java 强制关闭计算机 例如 以下代码可以很好地强制关闭 public static void main String arg throws IOException Runtime runtime Runtime get
  • 为什么溢出:隐藏会为内联块元素添加额外的高度?

    In 这个例子 http jsbin com zowejokuluce 4 HTML div div foo bar div div CSS body html div height 100 margin 0 div div display
  • 为什么 std::fill(0) 比 std::fill(1) 慢?

    我观察到一个系统std fill在一个大的std vector
  • 如何在 JAX-WS 中添加响应标头?

    我有一个与此类似的方法 WebMethod public BeanResponse generar WebParam header true mode Mode INOUT name auditoria partName auditoria
  • 如何使用 RSpec 针对真实应用程序开发 Rails3 引擎?

    关于引擎开发以及使用虚拟应用程序进行测试的文章已经有很多 在我们的例子中 我们开发的引擎不是独立的实体 而是依赖于真实的 Rails 3 应用程序 我们仍然希望此代码存在于引擎中 而不是成为应用程序的一部分 因为引擎的工作是从拥有自己的表和