2010-12-07 87 views
19

我很抱歉,如果這個問題有點主觀......我想找出測試Rails 3引擎與黃瓜& Rspec的最佳方法。爲了測試引擎,需要使用導軌3應用程序。這是我目前在做什麼:如何使用Cucumber&Rspec測試Rails 3引擎?

  1. 通過運行添加軌測試應用程序的寶石(myengine)的根:rails new /myengine/rails_app

  2. 加入黃瓜/myengine/rails_app/features,你會在一個正常的Rails應用程序

  3. 要求(使用:path=>"/myengine")Rails的引擎寶石/myengine/rails_app/Gemfile

  4. 添加規範創業板的根目錄下:/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) 

你看到任何問題,設置它喜歡這個?測試運行良好,但我有點猶豫,把功能放在測試軌道應用程序內。我原本試圖將這些功能放在gem的根目錄下,並且我在features/support裏創建了測試軌應用程序,但由於某些原因,當我運行測試時,我的引擎不會初始化,儘管當cuc運行時我可以看到應用程序加載其他所有內容。

如果有人正在使用Rails引擎,並且正在使用cuc和rspec進行測試,那麼我會很樂意聽到您的設置。

* * UPDATE
我改變了我的設置了一下,因爲我寫了這個問題。我決定擺脫引擎根目錄下的spec目錄。現在我只需創建一個名爲「test_app」的rails應用程序,並在該應用程序中設置cuc和rspec,就像我通常在rails應用程序中執行的操作一樣。然後我像上面第3步中所做的那樣包括寶石。由於引擎是一個子應用程序,我想它最好是測試它,就像它是一個普通的rails應用程序。如果有人有不同的設置,我仍然有興趣聽到。

回答

6

Rails 3.1(將)爲引擎生成一個相當不錯的腳手架。我建議你使用RVM創建一個新的寶石稱爲邊緣並切換到:

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 

可安裝選項使應用程序可掛載,而完整選項使其成爲已經內置測試的引擎。爲了測試引擎,這個生成器生成一個名爲dummy的文件夾test,其中包含一個小型的Rails應用程序。你可以看到這是如何加載在test/test_helper.rb

然後,您需要按摩數據以完成需要的工作。我建議將標準rails g cucumber:install中的黃瓜文件複製到項目中,然後對其進行調整,直到其正常工作。我之前完成了一次,所以我知道這是可能的,但我現在找不到代碼。

讓我知道你是怎麼去的。

+0

瑞安,謝謝你的信息。這正是我所期待的。看起來像3.1中有一些很好的改進。雖然在安裝rails edge時遇到了問題。 「錯誤:無法在任何存儲庫中找到有效的gem'pkg/rails-3.1.0.beta.gem'(> = 0)」所有其他寶石(AR,AS等)構建和安裝都很好,但它看起來不像Rakefile正在構建rails gem。也許是我的環境中的東西......我剛開始排除故障,但如果你有一分鐘​​,讓我知道你是否能夠從rake任務安裝邊緣而沒有錯誤。謝啦! – johnmcaliley 2011-01-22 15:15:56

2

我將解釋我是如何做到的使用爲例以下寶石:https://github.com/skozlov/netzke-core

測試應用。它在netzke-core/test/rails_app。這個應用程序可以獨立運行,所以我也可以使用它進行手動測試,或者如果我喜歡,可以使用新功能。

爲了測試應用程序加載寶石本身,我有在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__) 

...這將運行規範之前加載測試應用。

運行測試。這種設置讓我從寶石的根目錄中運行測試:

cucumber features 

rspec spec 

工廠女孩。不是這個特殊的寶石,但我通常使用factory_girl而不是燈具(例如,參見https://github.com/skozlov/netzke-basepack中的類似設置)。

0

有點遲到了,但這裏是我的策略:

  1. 生成軌道3插件。2:

    rails plugin new blog --mountable --full 
    

    這將創建test/dummy,包含虛擬Rails應用程序

  2. 添加的規格來spec

  3. 移動虛擬文件夾spec(和可選擺脫對方testfiles的)

  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') 
    

    features/support/env.rb

require 'cucumber/rails' 

現在你有featuresspec根的你的項目,而虛擬Rails應用程序是整齊前藏在之下

相關問題