Wol*_*old 4 rspec rails-engines ruby-on-rails-3
关于引擎开发和使用虚拟应用程序进行测试已经写了很多.
在我们的例子中,我们正在开发一个不是独立实体的引擎,但它依赖于真正的Rails 3应用程序.我们仍然希望此代码存在于引擎中,而不是成为应用程序的一部分,因为引擎的工作是从具有自己的表和模型映射的遗留系统导入数据,并且我们希望最终再次删除它.
旧遗留表和新模式之间的数据映射很复杂,我们希望TDD(使用rspec)引擎.
/spec/dummy_app用一个指向真正的Rails 3应用程序的git子模块替换了.config/application.rb,需要引擎(这是虚拟应用程序所做的) ,如本书第15-16页所述.lib文件夹包含在加载路径$:中spec_helper,路径可用.require成spec_helper.rb并没有解决问题.思考?
所以,我想出了一些事情并且会回答我自己的问题,现在我已经开始工作了.
为简单起见,我将把我宝石的名称称为"my_gem"和"MyGem":
在engine.rb文件中,我补充说:
require 'my_gem'
require 'rails'
Run Code Online (Sandbox Code Playgroud)
这种固定错误的类型:
my_gem/lib/my_gem/engine.rb:2: uninitialized constant MyGem::Rails (NameError)
Run Code Online (Sandbox Code Playgroud)
在spec_helper.rb,我添加了正确的顶部:
require 'bundler/setup'
require 'my_gem'
Run Code Online (Sandbox Code Playgroud)
这是为了确保Bundler立即初始化,而不是通过应用程序.这样我可以在这里加载MyGem,它将被挂钩到应用程序的初始化序列中.这修复NameError了引擎模型类的异常.
这留下了Gemfile使用什么的问题.问题是我的应用程序有自己的gemfile,而gem /引擎需要自己独立的依赖项Gemfile.
我找不到任何用于Bundler的API来传递Gemfile它,实际上Bundler似乎是围绕着一个权威的假设而建立的Gemfile.所以我生成一个spec_helper.我拿了应用程序的gemfile并追加gemspec指向gem的GemSpec格式的依赖项.(gemspec顺便说一句,Jose Valim的书中没有提到这个暗示).
我不知道在测试启动期间是否有比连接文件更好的方法.如果您知道其中一个,请回复.
有用的资源是:
| 归档时间: |
|
| 查看次数: |
917 次 |
| 最近记录: |