Ecco un modo economico e semplice (anche se non ufficialmente consigliato):
Crea un dir nella radice della tua gemma chiamato spec
, inserisci le tue specifiche. Probabilmente hai già installato rspec, ma se non lo fai, basta fare un gem install rspec
e dimenticare Gemfile e bundler.
Successivamente, farai una specifica e dovrai dirlo dove si trova la tua app, dove sono i tuoi file e includere il file che vuoi testare (insieme a tutte le dipendenze che ha):
# spec/awesome_gem/awesome.rb
APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
$: << File.join(APP_ROOT, 'lib/awesome_gem') # so rspec knows where your file could be
require 'some_file_in_the_above_dir' # this loads the class you want to test
describe AwesomeGem::Awesome do
before do
@dog = AwesomeGem::Awesome.new(name: 'woofer!')
end
it 'should have a name' do
@dog.name.should eq 'woofer!'
end
context '#lick_things' do
it 'should return the dog\'s name in a string' do
@dog.lick_things.should include 'woofer!:'
end
end
end
Apri Terminal ed esegui rspec:
~/awesome_gem $ rspec
..
Finished in 0.56 seconds
2 examples, 0 failures
Se vuoi che alcune .rspec
opzioni ti piacciano, vai a fare un .rspec
file e mettilo nel percorso di root della tua gemma. Il mio assomiglia a questo:
# .rspec
--format documentation --color --debug --fail-fast
Facile, veloce, pulito!
Mi piace perché non devi assolutamente aggiungere dipendenze al tuo progetto e il tutto rimane molto velocemente. bundle exec
rallenta un po 'le cose, che è quello che dovresti fare per assicurarti di usare sempre la stessa versione di rspec. Gli 0,56 secondi necessari per eseguire due test sono stati assorbiti al 99% dal tempo impiegato dal mio computer per caricare rspec. Eseguire centinaia di specifiche dovrebbe essere estremamente veloce. L'unico problema che potresti riscontrare di cui sono a conoscenza è che se cambi le versioni di rspec e la nuova versione non è retrocompatibile con alcune funzioni che hai usato nel tuo test, potresti dover riscrivere alcuni test.
Questo è bello se stai facendo specifiche una tantum o hai qualche buon motivo per NON includere rspec nel tuo gemspec, tuttavia non è molto buono per consentire la condivisione o l'applicazione della compatibilità.