Dzięki dodanemu generatorowi rspec-rails skonfigurowanie RSpec do testowania aplikacji Rails jest całkiem proste. Ale co powiesz na dodanie RSpec do testowania perełki w rozwoju? Nie używam jubilera ani takich narzędzi. Właśnie użyłem Bundler ( bundle gem my_gem
), aby ustawić strukturę dla nowego klejnotu i ręcznie edytować * .gemspec. Dodałem również s.add_development_dependency "rspec", ">= 2.0.0"
do gemspec i zrobiłem bundle install
.
Czy jest jakiś fajny poradnik, co dalej zrobić, aby RSpec działał?
Odpowiedzi:
Zaktualizowałem tę odpowiedź, aby była zgodna z aktualnymi sprawdzonymi metodami:
Bundler doskonale obsługuje rozwój klejnotów. Jeśli tworzysz klejnot, jedyne , co musisz mieć w swoim Gemfile, to:
Mówi to Bundlerowi, aby po uruchomieniu zajrzał do pliku gemspec w poszukiwaniu zależności
bundle install
.Następnie upewnij się, że RSpec jest zależnością programistyczną twojego klejnotu. Edytuj gemspec tak, aby brzmiał:
Następnie utwórz
spec/spec_helper.rb
i dodaj coś takiego:Pierwsze dwie linijki mówią Bundlerowi, aby załadował tylko klejnoty z twojego gemspec. Kiedy zainstalujesz swój własny klejnot na własnym komputerze, zmusi to twoje specyfikacje do użycia twojego obecnego kodu, a nie wersji, którą zainstalowałeś oddzielnie.
Utwórz specyfikację, na przykład
spec/foobar_spec.rb
:Opcjonalnie: dodaj
.rspec
plik z domyślnymi opcjami i umieść go w ścieżce głównej twojego klejnotu:Na koniec: uruchom specyfikacje:
źródło
rspec --init
rspec --init
nie było dostępne, kiedy to pisałem, ale słuszna uwaga!Powyższe rozwiązanie Iaina działa świetnie!
Jeśli chcesz również Rakefile, to wszystko, czego potrzebujesz:
Sprawdź RDoc dla RakeTask pod kątem różnych opcji, które możesz opcjonalnie przekazać do definicji zadania.
źródło
Możesz wygenerować swój nowy klejnot za pomocą rspec, uruchamiając
bundler gem --test=rspec my_gem
. Bez dodatkowej konfiguracji!Zawsze o tym zapominam. Jest zaimplementowany tutaj: https://github.com/bundler/bundler/blob/33d2f67d56fe8bf00b0189c26125d27527ef1516/lib/bundler/cli/gem.rb#L36
źródło
--test=rspec
, ale nadal pytał mnie, czy chcę używać Rspec, kiedy biegałembundler gem my_gem
.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óbgem 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):
Otwórz Terminal i uruchom rspec:
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:Ł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.
źródło
Thing = AwesomeGem::Awesome
albo możesz przeprowadzić test wewnątrz modułu, na przykładmodule AwesomeGem; it 'stuff' do; Awesome.new ... end; end