如何使用Cucumber和Rspec测试Rails 3引擎?

joh*_*ley 19 ruby-on-rails rails-engines ruby-on-rails-3

如果这个问题有点主观,我道歉...我正在试图找出用黄瓜和Rspec测试Rails 3引擎的最佳方法.为了测试发动机,需要使用导轨3 app.这是我目前正在做的事情:

  1. 通过运行以下命令将rails测试应用添加到gem(myengine)的根目录: rails new /myengine/rails_app

  2. /myengine/rails_app/features像在普通的Rails应用程序中一样添加Cucumber

  3. 需要Rails Engine Gem(使用:path=>"/myengine")in/myengine/rails_app/Gemfile

  4. 将spec添加到gem的根目录: /myengine/spec

  5. 包括夹具,/myengine/spec/fixtures我将以下内容添加到我的cuc env.rb中:

env.rb:

Fixtures.reset_cache
fixtures_folder = File.join(Rails.root, 'spec', 'fixtures')  
fixtures = Dir[File.join(fixtures_folder, '*.yml')].map {|f| File.basename(f, '.yml') }  
Fixtures.create_fixtures(fixtures_folder, fixtures)
Run Code Online (Sandbox Code Playgroud)

你看到这样设置有什么问题吗?测试运行正常,但我有点犹豫要把功能放在测试轨应用程序中.我最初尝试将这些功能放在gem的根目录中,并且我在里面创建了测试rails应用程序features/support,但由于某些原因,当我运行测试时我的引擎不会初始化,即使我可以看到应用程序在cuc运行时加载其他所有内容.

如果有人正在使用Rails Engines并使用cuc和rspec进行测试,我将有兴趣听听您的设置.

**更新
自从我写这个问题以来,我改变了我的设置.我决定摆脱引擎根目录下的spec目录.现在我只创建一个名为"test_app"的rails应用程序,并在该应用程序中设置cuc和rspec,就像我通常在rails应用程序中所做的那样.然后我像上面步骤#3中那样包含宝石.由于引擎是一个子应用程序,我想它最好测试它就像一个普通的rails应用程序.如果有人有不同的设置,我仍然有兴趣听到.

Rya*_*igg 6

Rails 3.1(将)为引擎生成一个非常好的支架.我建议使用RVM创建一个名为edge的新gemset并切换到它:

rvm gemset create edge
rvm use @edge
Run Code Online (Sandbox Code Playgroud)

然后安装边缘导轨:

git clone git://github.com/rails/rails.git
cd rails
rake install
Run Code Online (Sandbox Code Playgroud)

从那里,您可以关注Piotr Sarnacki的可安装应用教程,替换以下呼叫:

bundle exec ./bin/rails plugin new ../blog --edge --mountable
Run Code Online (Sandbox Code Playgroud)

简单地说:

rails plugin new blog --mountable --full
Run Code Online (Sandbox Code Playgroud)

可安装选项使应用程序可安装,而完整选项使其成为内置测试的引擎.为了测试引擎,这个生成器生成一个包含一个小Rails应用程序的test被调用文件夹dummy.你可以看到它是如何加载的test/test_helper.rb.

然后由您来按摩数据以执行它需要的工作.我建议将黄瓜文件从标准复制rails g cucumber:install到项目中然后搞乱它直到它工作.我之前做过一次,所以我知道这是可能的,但我现在找不到代码.

让我知道你怎么去.