37

Ho iniziato a creare un motore Rails 3.1, e ho difficoltà a testarlo usando rspec.Testing Rails 3.1 motore montabile con Rspec

Prima di tutto, se corro rails g integration_test whatever crea un test di integrazione regolare nei test/integrazione al posto di spec/richieste (RSpec-rails gemma è installato e necessario come una dipendenza di sviluppo nel file gemspec)

Inoltre, quando eseguo un test delle specifiche, viene visualizzato un errore che indica che la tabella corrispondente al modello che sto testando non è stata creata. Ho provato rake engine_name:install:migrations ed eseguito rake db:migrate dall'interno dell'applicazione fittizia e ottengo un errore "esiste già una tabella".

Tutto sembra disconnesso, sento che mi manca qualcosa qui per rendere la gemma rspec perfettamente funzionante come di solito con le applicazioni complete di rail.

Ho seguito tutte le modifiche da qui http://rubyx.com/2011/03/01/start-your-engines e posso testare manualmente il motore avviando l'app fittizia tramite la console come mostrato qui http://railscasts.com/episodes/277-mountable-engines.

C'è un modo per rendere rspec l'impostazione predefinita per testare un motore di rails 3.1?

+0

In rails 3.2 alcuni di questi sono stati risolti, ma ho sempre dimenticato come migrare il database di test. Per eseguire le migrazioni nel database di test, esegui l'applicazione 'rake: db: test: prepare' nella directory del tuo gem. – Andrew

+0

Ho appena implementato il metodo in questo articolo senza problemi. http://viget.com/extend/rails-engine-testing-with-rspec-capybara-and-factorygirl – jspooner

risposta

62

Sto utilizzando RSpec con un motore Rails senza problemi.

Ho creato il mio plug-in utilizzando le seguenti opzioni: -T --full --dummy-path = spec/dummy.

  • -T esclude test/unit
  • --full indica che il plugin è un motore
  • --dummy-path è semplicemente in modo che non otteniamo una directory di prova (il default è test/fittizio).

Da lì ho usato lo spec_helper dall'articolo "accendete i motori":

# Configure Rails Envinronment 
ENV["RAILS_ENV"] = "test" 
require File.expand_path("../dummy/config/environment.rb", __FILE__) 

require 'rspec/rails' 

ENGINE_RAILS_ROOT=File.join(File.dirname(__FILE__), '../') 

# Requires supporting ruby files with custom matchers and macros, etc, 
# in spec/support/ and its subdirectories. 
Dir[File.join(ENGINE_RAILS_ROOT, "spec/support/**/*.rb")].each {|f| require f } 

RSpec.configure do |config| 
    config.use_transactional_fixtures = true 
end 

per i generatori. Aggiungo un config.generators bloccano al mio file engine.rb in questo modo:

module MyEngine 
    class Engine < Rails::Engine 
    config.generators do |g| 
     g.test_framework :rspec, :view_specs => false 
    end 
    end 
end 

Con questo, io sono in grado di ottenere le prove RSpec durante l'esecuzione di un generatore come il generatore di modello.

Per quanto riguarda il DB, il file database.yml è impostato correttamente? Hai caricato l'ambiente di test, ad es. rake db:test:clone o rake db:migrate RAILS_ENV=test? La mia ipotesi è che RSpec non possa vedere le tue tabelle perché non c'è un database di test impostato.

+1

non dovrei usare '--mountable 'invece di' --full'? – deb

+0

Ho seguito le modifiche nella risposta ma non riesco ancora a utilizzare il generatore. se provo 'rails g integration_test posts 'non succede nulla. Forse hai lasciato qualcosa? – deb

+0

Non uso il generatore di integration_test, quindi non sono sicuro. Basta passare --full significa che si tratta di un motore standard non assegnato a un nome e che genererà il progetto fittizio. Sono abbastanza sicuro che è necessario passare --full per un comando - anche per ottenere il progetto fittizio da generare, ma forse quello è cambiato dall'RC? Cosa succede se si esegue un modello di rotaie g ... o un controller? – dwhite

9

Stavo cercando la stessa risposta e ho trovato the combustion gem * che promettono di configurare un ambiente completo per specificare il tuo motore in un modo più semplice. Basta aggiungere

gem.add_development_dependency 'combustion', '~> 0.3.1' 

al vostro gemspec ed eseguire

bundle exec combust 

di riprodurre una rotaie piena applicazione nella directory spec.

* Non l'ho ancora provato ...

+0

Grazie per il riferimento - rocce di combustione. –

Problemi correlati