【问题标题】:How to test Rails 3 Engines with Cucumber & Rspec?如何使用 Cucumber 和 Rspec 测试 Rails 3 引擎?
【发布时间】:2010-12-07 19:51:26
【问题描述】:

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

  1. 通过运行:rails new /myengine/rails_app

  2. 将 Rails 测试应用添加到 gem (myengine) 的根目录
  3. 像在普通 Rails 应用程序中一样将 Cucumber 添加到 /myengine/rails_app/features

  4. 需要 /myengine/rails_app/Gemfile 中的 Rails Engine Gem(使用 :path=>"/myengine"

  5. 将规范添加到gem的根目录:/myengine/spec

  6. /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)

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

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

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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 rails-engines


    【解决方案1】:

    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's mountable app tutorial,替换呼叫,例如:

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

    简单地说:

    rails plugin new blog --mountable --full
    

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

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

    让我知道你的情况。

    【讨论】:

    • 瑞恩,感谢您提供的信息。这就是我一直在寻找的。看起来在 3.1 中会有一些不错的改进。但是,在安装导轨边缘时遇到了麻烦。 “错误:在任何存储库中都找不到有效的 gem 'pkg/rails-3.1.0.beta.gem' (>= 0)”所有其他 gem(AR、AS 等)都可以正常构建和安装,但是它看起来不像 Rakefile 正在构建 rails gem。也许与我的环境有关...我刚刚开始对其进行故障排除,但是如果您有时间,请告诉我您是否能够从 rake 任务中安装 edge 而不会出错。谢谢大佬!
    • 我在没有运气的情况下搞砸了它,最终在 pkg 目录中手动构建了 gem。然后 rake install 工作,因为 gem 在那里。不知道为什么它不能开箱即用..
    • 此外,模板目录中的 MIT-LICENSE 似乎存在错误。 erb 找不到 Date.today ......也许该方法是动态删除的?我只是将日期硬编码到模板中作为临时解决方法。除此之外,模板看起来很坚固。再次感谢
    • 这里也有同样的错误。错误:在任何存储库中都找不到有效的 gem 'pkg/rails-3.1.0.beta.gem' (>= 0)
    【解决方案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 中的类似设置)。

    【讨论】:

      【解决方案3】:

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

      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 文件夹a.o.

      6. 添加

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

        之前

        require 'cucumber/rails'
        

        features/support/env.rb

      现在您的项目根目录中有featuresspec,而虚拟rails 应用程序整齐地隐藏在spec/dummy

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-13
        • 1970-01-01
        • 1970-01-01
        • 2011-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多