2012-04-22 22 views
8

Używam kapibary zamiast Webrata w szynach. Zainstalowałem kapibarę i używam gem 'capybara' w Gemfile. kiedy używaćOczekiwany css "title" z tekstem w kapibarze

page.should have_selector("title", :text => "anything title") 

to dać błąd

Failure/Error: page.should have_selector("title", :text => "anything title") 
expected css "title" with text "anything title" to return something 

plik testowy jest jak poniżej:

require 'spec_helper' 

describe "Test pages" do 
    describe "Home page" do  
    it "should have the content 'Demo App'" do 
    visit '/test_pages/home'  
    page.should have_selector("title", :text => "anything title")    
    end 
end 
end 
+1

Czy wypróbowałeś 'save_and_open_page' tuż przed swoją asercją testową, aby zobaczyć, co myśli Capybara? – nmott

Odpowiedz

12

Nie wiem, która wersja klejnotów używasz ale wpadłem na podobny przykład gdzie używanie: tekst nie powiodło się, ale gdy użyłem: treść przeszła test. Używam rails 3.2.3, rspec-rails 2.9.0, capybara 1.1.2 i klejnotów therubyracer na Ubuntu Lucid Lynx.

spróbować wymienić

page.should have_selector("title", :text => "anything title") 

z

page.should have_selector("title", :content => "anything title") 
+0

Hej! Używam gem 'rails', '3.2.3', gem 'rspec-rails', '2.9.0', a także gem 'capybara', '1.1.2' na Ubuntu i również windows. Użyłem: zawartość i działa dobrze! Dzięki. – vajapravin

+0

Cieszę się, że działało, ale od tego czasu dostałem: tekst do pracy i zgodnie z dokumentacją za pomocą: tekst jest prawidłowy sposób to zrobić. Miałem ducha w maszynie, ponieważ nie mogę odtworzyć problemu. Zobacz [rubydoc: Capybara :: RSpecMatchers # have_selector] (http://rubydoc.info/github/jnicklas/capybara/Capybara/RSpecMatchers#have_selector-instance_method) – rbnewb

+0

Mam ten sam problem. Z jakiegoś powodu, tylko na elemencie title, ': content' działa, ale': text' nie ... tak dziwne. –

1

mam podobny problem, po prostu pozwolić ci wiedzieć, użycie: zawartość nie jest obsługiwana w Kapibara, powinno być: text.

Problem z tym, że zawartość nie jest rozpoznawana przez Capybara, a następnie jest ignorowana i wyświetlana jako PRZEKAZANA, ale jest to niewłaściwe zachowanie.

Więc jeśli używasz kapibara, przełącz każdy: treść na: tekst, aby zobaczyć, czy test naprawdę mija, być może są błędy nie zauważone.

4

Problem polega na tym, że przeglądarki traktują znaczniki <title> jako niewidoczne. (Dziękuję DreadPirateShawn za link do issue na ten temat).

Nie ma „czyste” sposób, aby uzyskać tytuł, ale z odrobiną hack nadal można testować wartość tytuáu wykonując następujące czynności:

first('head title').native.text.should == "WhateverYourTitleNeedsToBe" 

nie używaj :content symbol, ponieważ w starszych wersje błędnych tagów Capybara byłyby ignorowane i wyglądałoby to tak, jakby Twój test minął. W nowszej wersji pojawi się miły komunikat o błędzie, taki jak:

ArgumentError: invalid keys :content, should be one of :text, :visible, :between, :count, :maximum, :minimum

+0

Wierzę, że najczystszy sposób aby uzyskać tytuł, należy użyć xpath. W ten sposób: 'page.find: xpath, '// title', visible: false' – etagwerker

0

Napotkałem te same problemy. Empirycznie oto co znalazłem:

page.should have_selector("title", :text => "AnyTitle") 

będzie oczekiwać wyjście html zawiera znacznik, jak poniżej:

<title text="AnyTitle"/> 

jednak, jeśli używasz: zawartość zamiast: tekst poniżej

page.should have_selector("title", :content => "AnyTitle") 

to będzie oczekiwać wyjście html zawierać tag poniżej

<title>AnyTitle</title> 

Jeśli więc wynikowe renderowanie html zawiera tag <title text="AnyTitle"/>, powinieneś użyć: text w przeciwnym razie, jeśli wynikowe renderowanie html zawiera tag <title>AnyTitle</title>, możesz zamiast tego użyć: treści.

P.S. moje otoczenie Gem: Kapibara-2.0.2, rails-3.2.12, rspec barierki-2.12.2, webrat-0.7.3 jeśli usuń webrat, a następnie ": conetnt" Kluczowym słowem jest nierozpoznany przez Kapibara sam.

Ale czysty sposób to naprawić to: pozbyć webrat i zainstalować stabilną Kapibara-1.1.2, który jest w Gemfile

#gem webrat 
gem 'capybara', '1.1.2' 

patrz prusswan's answer

0

Wystarczy zrobić to:

expect(page).to have_title("some title")