Come prova di Rails 3 motori con cetrioli e Rspec?
-
09-10-2019 - |
Domanda
Mi scuso se questa domanda è un po 'soggettivo ... Sto cercando di capire il modo migliore per testare Rails 3 Motori con cetriolo e Rspec. Al fine di testare il motore a Rails 3 app è necessario. Ecco quello che sto facendo attualmente:
-
Aggiungi un Test App rotaie alla radice della gemma (MyEngine) eseguendo:
rails new /myengine/rails_app
-
Aggiungi al cetriolo
/myengine/rails_app/features
come si farebbe in una normale applicazione Rails -
Richiede l'Rails Engine Gem (utilizzando
:path=>"/myengine"
) in/myengine/rails_app/Gemfile
-
Aggiungi spec alla directory principale della gemma:
/myengine/spec
-
Includere gli infissi in
/myengine/spec/fixtures
e aggiungo il seguente al mio 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)
Vedete tutti i problemi con la sua creazione come questo? I test funzionano bene, ma io sono un po 'titubante per mettere le caratteristiche all'interno del test di applicazione Rails. Originariamente ho provato a mettere le caratteristiche nella radice della gemma e ho creato il test di applicazione Rails all'interno features/support
, ma per qualche motivo il mio motore non sarebbe inizializzazione quando ho eseguito il test, anche se ho potuto vedere l'applicazione di carico tutto il resto quando cuc corse .
Se qualcuno sta lavorando con Rails Motori e sta usando cuc e RSpec per il test, sarei interessato a conoscere la configurazione.
* * UPDATE
Ho cambiato il mio setup un po 'da quando ho scritto questa domanda. Ho deciso di sbarazzarsi della directory specifica sotto la radice del motore. Ora ho solo creare una applicazione Rails chiamato "test_app" e la configurazione cuc e dentro RSpec che app come mi farebbe normalmente in un'applicazione Rails. Poi includo la gemma come ho fatto nel passo # 3 di cui sopra. Dato che il motore è un sub-app, immagino che il suo solo migliore per testare come se fosse una normale applicazione Rails. Sono ancora interessato a sentire se qualcuno ha una configurazione diversa.
Soluzione
Rails 3.1 (vi) generano una buona impalcatura per i motori. Mi consiglia di utilizzare RVM per creare un nuovo bordo GemSET chiamata e passare ad esso:
rvm gemset create edge
rvm use @edge
Quindi installare rotaie bordo:
git clone git://github.com/rails/rails.git
cd rails
rake install
Da lì, è possibile seguire app montabile Piotr del Sarnacki esercitazione , in sostituzione di chiamate come ad esempio:
bundle exec ./bin/rails plugin new ../blog --edge --mountable
Con semplicemente:
rails plugin new blog --mountable --full
L'opzione montabile rende l'applicazione montabile, mentre l'opzione completa lo rende un motore con le prove già incorporati. Per testare il motore, questo generatore genera una cartella in test
chiamato dummy
che contiene una piccola applicazione Rails. Si può vedere come questo viene caricato in test/test_helper.rb
.
Poi sta a voi per massaggiare i dati per fare ciò di cui ha bisogno al fine di lavoro. Suggerirei la copia sui file di cetriolo da un rails g cucumber:install
standard al progetto e poi pasticciare con esso fino a quando non funziona. Ho fatto questo una volta prima quindi so che è possibile, ma non riesco a trovare il codice al momento.
Fammi sapere come si va.
Altri suggerimenti
Ti spiego come ho fatto usando come esempio la seguente perla: https://github.com / skozlov / netzke-core
L'applicazione di test . E 'in netzke-core/test/rails_app
. Questa applicazione può essere eseguito in modo indipendente, in modo da poter essere utilizzato anche per il test manuale o per giocare con le nuove caratteristiche se mi piace.
Per consentire l'applicazione di test per caricare la gemma stessa, ho il seguente in application.rb
:
$:.unshift File.expand_path('../../../../lib', __FILE__)
require 'netzke-core'
cetriolo dispone . Sono in netzke-core/features
. In env.rb
ho:
require File.expand_path(File.dirname(__FILE__) + '/../../test/rails_app/config/environment')
... che caricherà l'applicazione di test prima di eseguire le funzioni.
Tutte le specifiche . Questi sono in netzke-core/spec
. In spec_helper.rb
ho il seguente:
require File.expand_path("../../test/rails_app/config/environment", __FILE__)
... che caricherà l'applicazione di test prima di eseguire le specifiche.
test in corso . Questa configurazione mi permette di eseguire i test dalla radice della gemma:
cucumber features
e
rspec spec
Factory Girl . Non per questo particolare gioiello, ma sto usando normalmente factory_girl al posto di apparecchi (vedi, ad esempio, una configurazione simile a https://github.com/skozlov/netzke-basepack ).
Un po 'in ritardo alla festa, ma qui è la mia strategia:
-
Generazione binari plug in 3.2:
rails plugin new blog --mountable --full
Questo crea
test/dummy
, contenente il manichino rotaie app -
Aggiungi le specifiche per
spec
-
Spostare la cartella fittizia per
spec
(e facoltativamente sbarazzarsi degli altri File di prova) -
Adapt
specs/spec_helper.rb
in modo che includerequire File.expand_path("../.../config/environment", __FILE__)
anziché
require File.expand_path("../dummy/config/environment", __FILE__)
-
Esegui
rails g cucumber:install
. Si genereràfeatures
cartella A. Ó. -
Aggiungi
ENV["RAILS_ROOT"] ||= File.expand_path(File.dirname(__FILE__) + '/../../spec/dummy')
prima
require 'cucumber/rails'
in
features/support/env.rb
Ora avete features
e spec
nella radice di voi progetto, mentre il manichino applicazione Rails è ben nascosto sotto spec/dummy