Oto tani i łatwy (choć oficjalnie niezalecany) sposób:
Zrób katalog w katalogu głównym swojego klejnotu o nazwie spec
, umieść tam swoje specyfikacje. Prawdopodobnie masz już zainstalowany rspec, ale jeśli nie, po prostu zrób gem install rspec
i zapomnij o Gemfiles i bundlerze.
Następnie stworzysz specyfikację i musisz powiedzieć, gdzie jest twoja aplikacja, gdzie są twoje pliki i dołączyć plik, który chcesz przetestować (wraz z wszelkimi zależnościami, które ma):
# 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
Otwórz Terminal i uruchom rspec:
~/awesome_gem $ rspec
..
Finished in 0.56 seconds
2 examples, 0 failures
Jeśli chcesz, aby niektóre .rspec
opcje były miłe, zrób .rspec
plik i umieść go w ścieżce głównej swojego klejnotu. Mój wygląda tak:
# .rspec
--format documentation --color --debug --fail-fast
Łatwo, szybko, schludnie!
Podoba mi się to, ponieważ nie musisz w ogóle dodawać żadnych zależności do swojego projektu, a całość działa bardzo szybko. bundle exec
trochę spowalnia działanie, co musisz zrobić, aby mieć pewność, że cały czas używasz tej samej wersji rspec. To 0,56 sekundy, które zajęło wykonanie dwóch testów, było w 99% zajęte przez załadowanie rspec przez mój komputer. Uruchomienie setek specyfikacji powinno być niezwykle szybkie. Jedyny problem, na jaki możesz się natknąć, o którym wiem, to to, że jeśli zmienisz wersje rspec, a nowa wersja nie jest wstecznie kompatybilna z jakąś funkcją, której użyłeś w teście, może być konieczne ponowne napisanie niektórych testów.
Jest to fajne, jeśli robisz jednorazowe specyfikacje lub masz dobry powód, aby NIE włączać rspec do swojego gemspec, jednak nie jest zbyt dobre do włączania udostępniania lub wymuszania zgodności.