2012-09-19 6 views
7

Ho un motore Rails pensato per fornire alcuni modelli e controller a un nostro progetto più ampio. C'è una serie di specifiche abbastanza decenti per il motore, utilizzando un mucchio di mock e alcuni modelli e controller in scala reale all'interno dell'app dummy del motore per assicurarsi che il motore stia facendo ciò che è necessario e che lavori con l'applicazione più grande.Posso eseguire le specifiche di un motore Rails da un'app reale che la monta?

Tuttavia, anche con tutti i test che passano, durante il processo di aggiornamento del motore nell'applicazione più grande viene rilevato un comportamento anomalo. Se i miei test stanno passando ma il comportamento è rotto, chiaramente qualcosa non va nei test, ma cosa? Sto prendendo in giro troppo o non abbastanza?

Per avvicinarmi a questo, mi piacerebbe essere in grado di eseguire i test del motore dall'intera applicazione. Sembra che dovrebbe essere possibile, ma non capisco perfettamente rspec per capire come.

(Questo è legato alla this question ma non proprio la stessa;. Non sto cercando di eseguire tutte le specifiche da un comando, solo per eseguire le specifiche del motore all'interno dell'ambiente piena applicazione This sembra essere correlato realtà. , ho letto ogni domanda con i tag sia e --Ci non sono molti - e sono tutti o non quello che mi serve, o non risposte)

risposta

13

La soluzione più semplice sarebbe quella di specificare i percorsi. nel comando rspec. Se si dispone di struttura di directory

/project 
/engine 
/engine_2 

poi si fa e si deve eseguire tutte le specifiche

cd project 
rspec spec/ ../engine/spec ../engine_2/spec 

Ma se si desidera eseguire specifiche sul continuo integrazione o semplicemente questo non sembra essere confortevole Ho risolto questo problema con un'attività di spaziatura personalizzata spec., cambiando il metodo del motivo.

lib/task/rspec.rake dovrebbe assomigliare a questa

require "rspec/core/rake_task" 

RSpec::Core::RakeTask.new(:spec) 

task :default => :spec 
RSpec::Core::RakeTask.module_eval do 
    def pattern 
    extras = [] 
    Rails.application.config.rspec_paths.each do |dir| 
     if File.directory?(dir) 
     extras << File.join(dir, 'spec', '**', '*_spec.rb').to_s 
     end 
    end 
    [@pattern] | extras 
    end 
end 

In classe motore si aggiunge un percorso per config.rspec_paths

class Engine < ::Rails::Engine 
    # Register path to rspec 
    config.rspec_paths << self.root 
end 

e non dimenticate di inizializzare config.rspec_paths da qualche parte in un progetto di base.

Se si desidera aggiungere fabbriche, è possibile creare l'inizializzatore, è possibile trovare la soluzione da qualche parte qui su StackOverflow.

Non sono sicuro se questa soluzione è la migliore ma funziona per me e ne sono felice. In bocca al lupo!

+1

"Funziona per me e ne sono felice" è una risposta perfettamente valida in qualsiasi situazione! In questo caso sono in grado di iniziare semplicemente fornendo il percorso, quindi 'bundle exec rspec \' bundle show nome_motore \ '/ spec' come la risposta suggerisce che funziona bene. – pjmorse

+0

Non ho potuto farlo funzionare con la mia app/configurazione del motore. Le specifiche del motore non hanno mai funzionato. Potresti fornire un esempio con maggiori dettagli? – BM5k

+0

Ecco un sommario dal nostro progetto https://gist.github.com/kamilio/5582548 –

Problemi correlati