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 rspece 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 .rspecopzioni ti piacciano, vai a fare un .rspecfile 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 execrallenta 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à.