2013-10-22 8 views
11

करता रूबी 2 के साथ एक रेल 3.2.14 ऐप्लिकेशन में, और capybara निम्नलिखित सुविधा कल्पना एक विफलता उत्पन्न कर रहा है 2.1.0:Capybara/RSpec 'have_css' मेल खाने वाला काम नहीं कर रहा लेकिन has_css rspec-रेल 2.14.0 का उपयोग कर

require 'spec_helper' 

feature 'View the homepage' do 
    scenario 'user sees relevant page title' do 
    visit root_path 
    expect(page).to have_css('title', text: "Todo") 
    end 
end 

विफलता संदेश है:

1) View the homepage user sees relevant page title 
Failure/Error: expect(page).to have_css('title', text: "Todo") 
Capybara::ExpectationNotMet: 
    expected to find css "title" with text "Todo" but there were no matches. Also 
    found "", which matched the selector but not all filters. 

शीर्षक तत्व और सही पाठ गाया पेज

पर हैं

लेकिन जब मैं सुविधा कल्पना में इस लाइन बदलने के लिए:

expect(page).to have_css('title', text: "Todo") 
इस के लिए

:

page.has_css?('title', text: "Todo") 

तो परीक्षण से गुजरता है। [संपादित करें - लेकिन @JustinKo से नीचे प्रतिक्रिया देखते हैं कि इस परीक्षण के लिए एक अच्छा परीक्षण यह हमेशा पारित करेंगे के रूप में नहीं है] मैं काम करने के लिए have_css(...) प्रपत्र कैसे मिलता है

? क्या यह एक विन्यास मुद्दा है?

यहाँ मेरी Gemfile के प्रासंगिक हिस्सा है:

group :development, :test do 
    gem 'rspec-rails' 
    gem 'capybara' 
end 

और मेरे spec/spec_helper.rb इस तरह की स्थापना की है:

ENV["RAILS_ENV"] ||= 'test' 
require File.expand_path("../../config/environment", __FILE__) 
require 'rspec/rails' 
require 'rspec/autorun' 
require 'capybara/rails' 
require 'capybara/rspec' 

Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f } 

RSpec.configure do |config| 

    # out of the box rspec config code ommitted 

    config.include Capybara::DSL 
end 

किसी को भी पता है कि मैं गलत क्या कर रहा हो सकता है?

+0

आगे जाना है और इस पोस्ट, विशेष रूप से capybara हिस्सा http://nofail.de/2013/10/debugging कृपया पढ़ें:

expect(page).to have_css('title', :text => 'Todo', :visible => false) 

हालांकि, यह have_title विधि का उपयोग आसान होगा -रेल्स-अनुप्रयोग-इन-डेवलपमेंट/ – phoet

+0

यदि आप केवल 'पृष्ठ.has_css? (' शीर्षक ', टेक्स्ट: "टोडो") करते हैं, तो परीक्षण हमेशा पास होगा। 'has_css? 'बस सच या गलत लौटाता है, जो परीक्षण में विफल होने के लिए पर्याप्त नहीं है। यदि आप इसे आउटपुट करते हैं, तो आप देखेंगे कि यह गलत है। क्या आप वाकई टेक्स्ट के साथ शीर्षक तत्व हैं? –

+0

@ जस्टिनको न्यूबी त्रुटि को इंगित करने के लिए धन्यवाद। हां, शीर्षक उचित टेक्स्ट के साथ दिख रहा है - ब्राउज़र में चेक किया गया। –

उत्तर

16

डिफ़ॉल्ट रूप से, कैपिबरा केवल "दृश्यमान" तत्वों को ढूंढता है। मुख्य तत्व (और इसका शीर्षक तत्व) वास्तव में दिखाई नहीं दे रहा है। इसके परिणामस्वरूप has_css में शीर्षक तत्व को अनदेखा किया जा रहा है।

आप कैपिबरा को :visible => false विकल्प द्वारा गैर-दृश्य तत्वों पर विचार करने के लिए मजबूर कर सकते हैं।

expect(page).to have_title('Todo') 
+0

धन्यवाद - 'have_title' काम करता है :)। मैं एक ट्यूटोरियल का पालन कर रहा था जिसने 'हैकएसएस' विधि का उपयोग किया, जो उनके लिए (वीडियो पर) काम करता था, लेकिन शायद ऐसा इसलिए था क्योंकि वे केपबारा के पुराने संस्करण का उपयोग कर रहे थे, और हो सकता है कि 'has_css' को हटा दिया गया हो। मैं देखता हूं कि 'have_title' को [कैपिबरा मैचर्स प्रलेखन] में सूचीबद्ध नहीं है (http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Matchers), न ही आरएसपीईसी दस्तावेज़ों में या तो मैं देख सकता हूं, जो जीवन को किसी चीज के चारों ओर अपने सिर के रूप में प्राप्त करने के लिए थोड़ा सा कठिन बनाता है। –

+0

'have_title' rdocs में है - http: // rubydoc देखें।जानकारी/GitHub/jnicklas/capybara/मास्टर/Capybara/RSpecMatchers। –

+0

सिर के लिए धन्यवाद - वास्तव में सहायक। मुझे एहसास नहीं हुआ कि आरएसपीईसी के लिए एक अलग मैचर्स अनुभाग था - यह एक स्पष्ट भेद नहीं है। हालांकि, दस्तावेज़ों को देखते हुए, जबकि 'है_' मैचर्स वहां हैं, उनके खिलाफ कोई स्पष्टीकरण नहीं है, जो अभी भी इसे कठिन बना देता है! –

संबंधित मुद्दे