2012-12-06 7 views
7

Praca nad nową aplikacją Rails 3.2.9 z rspec i kapibarem.Dlaczego kapibara jest niedostępna w specyfikacji zamówienia?

Mam następujący w Gemfile:

gem 'rspec-rails' 
gem 'capybara' 

i następujący w specyfikacji/spec_helper.rb:

require 'rspec/rails' 
require 'capybara/rspec' 

w specyfikacji i/wnioski/asdf_spec.rb:

require 'spec_helper' 
describe 'Asdf' do 
    describe "GET /asdfs" do 
    it "should list asdfs" do 
     visit asdfs_path 
    end 
    end 
end 

Ten test kończy się niepowodzeniem:

Failure/Error: visit asdfs_path 
NoMethodError: 
undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_2::Nested_1:0x007fa7b68961a0> 
# ./spec/requests/asdfs_spec.rb:19:in `block (4 levels) in <top (required)>' 

Wygląda na to, że Capybara nie jest ładowana. Ack, czemu nie? Czuję, że robiłem to dokładnie to samo tuzin razy wcześniej ... prawdopodobnie z powodu czegoś głupiego.

+0

Czy używasz Capibara 2.0? –

+1

Tak, byłem! Moje google-search-fu było słabe. –

Odpowiedz

13

Tak było kapibary wersja 2 zmiany. Znalazłem to:

http://alindeman.github.com/2012/11/11/rspec-rails-and-capybara-2.0-what-you-need-to-know.html

który wyjaśnia:

Po uaktualnieniu do Kapibara 2.0, kapibary nie będzie dostępna przez domyślnie w rspec żądanie specyfikacji. Zamiast tego, nowy typ specyfikacji spec - został stworzony do użytku z kapibarami.

Aby uaktualnić Kapibara 2.0, musisz zrobić kilka rzeczy:

  • Upgrade rspec barierki do 2.12.0 lub wyższej
  • Przenieś wszystkie testy, które używają kapibary z wyspecjalizoway/wnioski o dopuszczenie do spec/funkcje. Testy Capybara wykorzystują metodę odwiedzin i zwykle potwierdzają na stronie.
+0

W międzyczasie przed przeniesieniem testów funkcji do ** spec/features ** from ** spec/requests **, możesz ponownie przekazać pakiet przez oznaczenie go opcją 'type:: feature'. –

+0

Kapibara 1.1.2 dostarczyła również kilka dopasowań, które były przydatne w specyfikacjach żądań (np. Have_selector), które nie są już dostępne, chyba że skonwertujesz specyfikacje żądań do specyfikacji funkcji. –

-2

Problem dotyczy samego klejnotu kapibara.

gem 'capybara', '1.1.2' rozwiązuje ten problem (wersja 2.0.x nie)

+13

Tak, to był problem w wersji 2.x. Ale chodź, odpowiedzią nie jest obniżenie. :) –

3

Wystarczy kilka dodatkowych informacji dla każdego, mającego ten sam problem z Kapibara upgrade do 2.x. Sprawdź dokumentację rspec-rails w sekcji Upgrading to Capybara 2.

Zasadniczo, aby skorzystać z wizyty Capybara DSL (strona &), należy przenieść istniejące specyfikacje do katalogu spec/features. Możesz więc używać tylko testów akceptacyjnych w zakresie page & visit. Koniec z odwiedzaniem strony w kontrolerze i żądaniach specyfikacji. Tylko test stelaża DSL (get|post|put|delete|head/response.body) jest dozwolony w kontrolerze i specyfikacji zamówienia.

To nie zalecane, ale nie jest to sposób, aby zachować swoje specyfikacje pracy, ponieważ są one:

RSpec.configure do |c| 
    c.include Capybara::DSL, :example_group => { 
    :file_path => "spec/requests" 
    } 
end 

Stan docs, że jeśli tę drogę wtedy są nadrzędne zamierzone zachowanie i jesteś podejmowanie ryzyka.

Zdecydowanie nie należy tego robić jako powodu do aktualizacji do Capybara 2.x. Specyfikacje funkcji są łatwe do przyzwyczajenia i łatwe do odczytania. feature to tylko alias dla describe, background to alias dla before, scenario dla it i given dla let.

Mam nadzieję, że to pomoże każdemu zdezorientować przez nowe zmiany.