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:

  1. Aggiungi un Test App rotaie alla radice della gemma (MyEngine) eseguendo: rails new /myengine/rails_app

  2. Aggiungi al cetriolo /myengine/rails_app/features come si farebbe in una normale applicazione Rails

  3. Richiede l'Rails Engine Gem (utilizzando :path=>"/myengine") in /myengine/rails_app/Gemfile

  4. Aggiungi spec alla directory principale della gemma: /myengine/spec

  5. 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.

È stato utile?

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:

  1. Generazione binari plug in 3.2:

    rails plugin new blog --mountable --full
    

    Questo crea test/dummy, contenente il manichino rotaie app

  2. Aggiungi le specifiche per spec

  3. Spostare la cartella fittizia per spec (e facoltativamente sbarazzarsi degli altri File di prova)

  4. Adapt specs/spec_helper.rb in modo che include

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

    anziché

    require File.expand_path("../dummy/config/environment", __FILE__)
    
  5. Esegui rails g cucumber:install. Si genererà features cartella A. Ó.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top