19

如果这个问题有点主观,我深表歉意......我正在尝试找出使用 Cucumber 和 Rspec 测试 Rails 3 引擎的最佳方法。为了测试引擎,需要一个 rails 3 应用程序。这是我目前正在做的事情:

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

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

  3. 需要 Rails 引擎 Gem(使用:path=>"/myengine"/myengine/rails_app/Gemfile

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

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

环境.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)

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

如果有人正在使用 Rails 引擎并使用 cuc 和 rspec 进行测试,我很想听听您的设置。

* *更新
自从我写了这个问题以来,我稍微改变了我的设置。我决定摆脱引擎根目录下的规范目录。现在,我只需创建一个名为“test_app”的 rails 应用程序,并在该应用程序中设置 cuc 和 rspec,就像我通常在 rails 应用程序中所做的那样。然后我像在上面的步骤 3 中那样包含 gem。由于引擎是一个子应用程序,我想最好像普通的 Rails 应用程序一样对其进行测试。我仍然有兴趣了解是否有人有不同的设置。

4

3 回答 3

6

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

rvm gemset create edge
rvm use @edge

然后安装边缘导轨:

git clone git://github.com/rails/rails.git
cd rails
rake install

从那里,您可以按照Piotr Sarnacki 的可安装应用程序教程,替换以下调用:

bundle exec ./bin/rails plugin new ../blog --edge --mountable

简单地说:

rails plugin new blog --mountable --full

mountable 选项使应用程序可挂载,而 full 选项使其成为已内置测试的引擎。为了测试引擎,这个生成器会生成一个test名为的文件夹,dummy其中包含一个小型 Rails 应用程序。您可以看到它是如何加载到test/test_helper.rb.

然后由您来处理数据以完成工作所需的工作。我建议将黄瓜文件从标准复制rails g cucumber:install到项目中,然后对其进行处理,直到它工作为止。我以前做过一次,所以我知道这是可能的,但我现在找不到代码。

让我知道你怎么去。

于 2011-01-21T21:21:21.323 回答
2

我将使用以下 gem 为例来解释我是如何做到的:https ://github.com/skozlov/netzke-core

测试应用程序。它在netzke-core/test/rails_app. 这个应用程序可以独立运行,所以我也可以将它用于手动测试或如果我喜欢玩新功能。

为了让测试应用程序加载 gem 本身,我有以下内容application.rb

$:.unshift File.expand_path('../../../../lib', __FILE__)
require 'netzke-core'

黄瓜的特点。他们在netzke-core/features. 在env.rb我有:

require File.expand_path(File.dirname(__FILE__) + '/../../test/rails_app/config/environment')

...这将在执行功能之前加载测试应用程序。

规格。这些在netzke-core/spec. 在spec_helper.rb我有以下内容:

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

...这将在运行规范之前加载测试应用程序。

运行测试。此设置允许我从 gem 的根目录运行测试:

cucumber features

rspec spec

工厂女孩。不适用于这个特定的 gem,但我通常使用 factory_girl 而不是固定装置(例如,参见https://github.com/skozlov/netzke-basepack中的类似设置)。

于 2011-01-22T15:09:23.793 回答
0

聚会有点晚了,但这是我的策略:

  1. 在 3.2 中生成 rails 插件:

    rails plugin new blog --mountable --full
    

    这将创建test/dummy,包含虚拟 rails 应用程序

  2. 将规格添加到spec

  3. 将虚拟文件夹移动到spec(并可选择删除其他测试文件)

  4. 适应specs/spec_helper.rb,使其包括

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

    代替

    require File.expand_path("../dummy/config/environment", __FILE__)
    
  5. 执行rails g cucumber:install。它将生成features文件夹ao

  6. 添加

    ENV["RAILS_ROOT"] ||= File.expand_path(File.dirname(__FILE__) + '/../../spec/dummy')
    

    require 'cucumber/rails'
    

    features/support/env.rb

现在你已经在你featuresspec项目的根目录中,而 dummy rails 应用程序被整齐地隐藏在下面spec/dummy

于 2014-01-06T20:20:59.770 回答