2012-01-09 15 views
16

मैंने अपने रेल 3.1 एप्लिकेशन के लिए कुछ पुष्टि संवाद बॉक्स जोड़े और इससे पहले, उनके संबंधित परीक्षण। Railscast #257 के मॉडल के बाद, मैंने परीक्षण में 'js => true' जोड़ा, डेटाबेस_क्लेनर जोड़ा और तदनुसार spec_helper.rb फ़ाइल को संशोधित किया।रेलवे में कैपिबारा, रुपेक और सेलेनियम के साथ परीक्षण करते समय लॉगिन विफलता 3.1

जब मैं परीक्षण चलाता हूं, फ़ायरफ़ॉक्स लॉन्च करता है, कैपिबारा-सेलेनियम फ़ील्ड में उपयुक्त उपयोगकर्ता नाम और पासवर्ड भरता है, लेकिन लॉग-इन विफल रहता है (यानी, "अवैध उपयोगकर्ता नाम/पासवर्ड"।) अन्य परीक्षण जिनमें नहीं है ': जेएस => सच' और लॉगिन भी, अभी भी पास करें।

मैं भविष्य में अपने आवेदन करने के लिए और अधिक जावास्क्रिप्ट जोड़ना चाहते हैं और मैं समाधान Capybara इस काम करने के लिए प्राप्त करने के लिए हैक होता है कि परहेज कर रहा हूँ (सभी संवादों पर 'ठीक है' जैसे, क्लिक करें।)

कोई भी विचार क्या मुझे याद आ रही है? इस समस्या को डीबग करने के तरीके पर कोई सुझाव है?

धन्यवाद।

उत्तर

14

आपको अपने सेलेनियमटेस्ट के लिए use_transactional_fixtures = false सेट करना चाहिए। यह

config.use_transactional_fixtures = false 
अपने सभी परीक्षणों के लिए

साथ spec_helper.rb में किया जा सकता।

या फिर इकलौते testcase के लिए ऐसा करते हैं:

describe 'testcase' , :type => :request do 
    self.use_transactional_fixtures = false 
    it 'your test', :js => :true do 
    testing... 
    end 
end 

यह इसलिए होता है क्योंकि सेलेनियम-परीक्षण एक अलग तरीके से डेटाबेस का उपयोग। लेनदेन संबंधी फिक्स्चर सक्षम होने के साथ, सेलेनियम एक खाली डेटाबेस पर काम करेगा -> आपका उपयोगकर्ता मौजूद नहीं है और आप लॉगिन नहीं कर सकते हैं।

सामान्य परीक्षणों के लिए आपको लेनदेन संबंधी फिक्स्चर का उपयोग करना चाहिए क्योंकि आपके परीक्षण बहुत तेज चलते हैं।

+0

जवाब देने के लिए धन्यवाद। मेरे पास spec_helper.rb में लेनदेन संबंधी फिक्स्चर अक्षम थे और यह काम नहीं किया। लेकिन विशिष्ट परीक्षण में इसे करने से काम किया! जब मैंने बटन पर क्लिक किया तो उसने मुझे लॉग इन किया और परीक्षण में असफल रहा। लेकिन पुष्टि संवाद दिखाई दिया, अब मुझे यह समझने की जरूरत है कि एकीकरण परीक्षण के माध्यम से इसे कैसे क्लिक करें। एक बार फिर धन्यवाद! – JHo

+0

यदि यह एक आम रेल संवाद है तो आप कोशिश कर सकते हैं: page.driver.browser.switch_to.alert.accept –

+0

यदि मैं mongoid का उपयोग कर रहा हूं तो क्या होगा? मैं use_transactional_fixtures = false –

9

के अनुसार Avdi Grimm's post (एक विस्तृत विवरण शामिल हैं):

Gemfile:

group :test do 
    gem 'database_cleaner' 
end 

spec_helper.rb:

config.use_transactional_fixtures = false 

कल्पना/support/database_cleaner.rb :

RSpec.configure do |config| 

    config.before(:suite) do 
    DatabaseCleaner.clean_with(:truncation) 
    end 

    config.before(:each) do 
    DatabaseCleaner.strategy = :transaction 
    end 

    config.before(:each, :js => true) do 
    DatabaseCleaner.strategy = :truncation 
    end 

    config.before(:each) do 
    DatabaseCleaner.start 
    end 

    config.after(:each) do 
    DatabaseCleaner.clean 
    end 

end 

मैं व्यवहार जुड़नार अक्षम कर दिया था लेकिन database_cleaner.rb को :js => true ब्लॉक जोड़ने मेरे लिए ऐसा किया।

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