加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails-3 – 如何使用RSpec针对真实应用开发Rails3引擎?

发布时间:2020-12-17 02:52:40 所属栏目:百科 来源:网络整理
导读:关于引擎开发和使用虚拟应用程序进行测试已经写了很多. 在我们的例子中,我们正在开发一个不是独立实体的引擎,但它依赖于真正的Rails 3应用程序.我们仍然希望此代码存在于引擎中,而不是成为应用程序的一部分,因为引擎的工作是从具有自己的表和模型映射的遗留
关于引擎开发和使用虚拟应用程序进行测试已经写了很多.

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

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

>我跟随Jose Valim’s book “Crafting Rails Appliations”并使用enginex gem.
>我用一个指向真正的Rails 3应用程序的git子模块替换了/ spec / dummy_app.
>我无法从引擎加载模型(未定义的符号错误),因为真正的应用程序的Gemfile没有指向引擎,我也无法修改config / application.rb,需要引擎(正如虚拟应用程序所做的那样,如本书第15-16页所述.
>我将引擎的lib文件夹包含在spec_helper的加载路径$:中,路径可用.
>将require放入spec_helper.rb并没有解决问题.
>我想知道是否有内部Rails API(或聪明的猴子补丁)挂钩到真实应用程序的启动序列并需要引擎,而无需修改真实应用程序的代码(因为它在子模块中).
>我不完全确定的另一个问题是我有2个Gemfiles(一个在引擎中,一个在应用程序中),当引擎处于活动状态时,它们都应该被使用.

思考?

解决方法

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

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

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

require 'my_gem'
require 'rails'

这种固定错误的类型:

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

在spec_helper.rb中,我添加了正确的顶部:

require 'bundler/setup'
require 'my_gem'

这是为了确保Bundler立即初始化,而不是通过应用程序.这样我可以在这里加载MyGem,它将被挂钩到应用程序的初始化序列中.这修复了引擎模型类的NameError异常.

这留下了Gemfile使用的问题.问题是我的应用程序有自己的gemfile,而gem /引擎需要在自己的Gemfile中使用它独立的依赖项.

我找不到Bundler的任何API来传递两个Gemfile,实际上Bundler似乎是围绕一个权威Gemfile的假设而构建的.所以我在spec_helper中生成一个.我拿了应用程序的gemfile并附加gemspec,它指向gem的GemSpec格式依赖. (顺便说一句,关于gemspec的暗示从Jose Valim的书中遗漏了).

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

有用的资源是:

> Clarifying the Roles of the .gemspec and Gemfile by Yehuda Katz
> Bundler Documentation for gemspec

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读