2011-11-18 9 views
48

मैं कैपिबरा के लिए नया हूं और सामान्य रूप से रेल पर परीक्षण कर रहा हूं, इसलिए कृपया मुझे क्षमा करें यदि यह एक साधारण उत्तर है।कैपिबरा के साथ: जेएस => सच्चा कारण परीक्षण विफल रहता है

मैं इस परीक्षण

it "should be able to edit an assignment" do 
    visit dashboard_path 
    select(@project.client + " - " + @project.name, :from => "assignment_project_id") 
    select(@team_member.first_name + " " + @team_member.last_name, :from => "assignment_person_id") 
    click_button "Create assignment" 
    page.should have_content(@team_member.first_name) 
end 

यह इसी रूप में गुजरता है मिल गया है, लेकिन अगर मैं जोड़ें: js => true यह मैं डेटा बनाने के लिए उपयोग कर रहा हूँ FactoryGirl

cannot select option, no option with text 'Test client - Test project' in select box 'assignment_project_id' 

के साथ विफल , और जैसा कि परीक्षण जेएस के बिना गुजरता है, मुझे पता है कि हिस्सा काम कर रहा है। वेबकिट ड्राइवर (capybara-वेबकिट के साथ स्थापित)

मुझे लगता है कि मैं काफी क्या Capybara के लिए जे एस पर मोड़ कर रही है समझ में नहीं आता:

मैं के साथ डिफ़ॉल्ट जे एस ड्राइवर के साथ की कोशिश की है, और।

परीक्षण जेएस के साथ क्यों विफल हो जाएगा?

+0

यह कारण हो सकता है जेएस चालू होने पर विभिन्न प्रकार के चयनकर्ताओं का उपयोग किया जाता है। मैं इस तरह की एक जैसी अजीब समस्याओं में भाग गया। क्या आप अपना परीक्षण संशोधित कर सकते हैं और विकल्प को सरल बना सकते हैं (बिना "-") उदाहरण के लिए 'चुनें (@ project.name,: from => "असाइनमेंट_प्रोजेक्ट_आईडी")' बस इसका परीक्षण करने के लिए और देखें कि क्या होता है? –

+0

विचार के लिए धन्यवाद। कोशिश की, लेकिन दुर्भाग्य से यह काम नहीं किया। अब बस "टेक्स्ट के साथ कोई विकल्प नहीं 'टेस्ट प्रोजेक्ट' – evanmcd

+0

अभी के लिए, ऐसा लगता है कि मैं जिस वर्कअराउंड का उपयोग करूंगा वह डेटा के साथ परीक्षण डेटाबेस को पॉप्युलेट कर देगा और प्रत्येक टेस्ट को अलग करने के लिए केवल डेटाबेस से डेटा की आवश्यकता होगी। शायद इस तरह से यह शुरुआत से किया जाना चाहिए, लेकिन मेरी धारणा यह थी कि आप Capybara का उपयोग करके एक रिकॉर्ड डाल सकते हैं, तब तक उस प्रविष्टि से डेटा पर कार्य करें जब तक कि यह उसी "इसे" ब्लॉक में था। – evanmcd

उत्तर

105

मैंने https://github.com/jnicklas/capybara पर कैपिबरा रीडेम पढ़ा है और यह मेरी समस्या हल कर चुका है।

लेन-देन संबंधी जुड़नार केवल डिफ़ॉल्ट रैक :: टेस्ट ड्राइवर में काम करते हैं, लेकिन सेलेनियम जैसे अन्य चालकों के लिए नहीं । ककड़ी स्वचालित रूप से का ख्याल रखती है, लेकिन टेस्ट :: यूनिट या आरएसपीईसी के साथ, आपको डेटाबेस_कलानेर मणि का उपयोग करना पड़ सकता है। विवरण के लिए this explanation (और solution 2 और solution 3 के लिए कोड) देखें।

लेकिन मूल रूप से यह एक थ्रेडिंग मुद्दा है जिसमें गैर-रैक ड्राइवर चलाने पर कैपिबरा का अपना धागा होता है, जो लेनदेन संबंधी फिक्स्चर को किसी अन्य संदर्भ में दूसरे कनेक्शन का उपयोग करने की सुविधा देता है। तो ड्राइवर धागा चल रहे rspec के समान संदर्भ में कभी नहीं है।

सौभाग्य से यह आसानी से हल किया जा सकता है (कम से कम यह मेरे लिए हल) का उपयोग करने वें DatabaseCleaner रणनीति में एक गतिशील स्विचिंग कर:

RSpec.configure do |config| 
    config.use_transactional_fixtures = false 

    config.before :each do 
    if Capybara.current_driver == :rack_test 
     DatabaseCleaner.strategy = :transaction 
    else 
     DatabaseCleaner.strategy = :truncation 
    end 
    DatabaseCleaner.start 
    end 

    config.after do 
    DatabaseCleaner.clean 
    end 
end 
+0

ने इसे दबाया - धन्यवाद!भी - अब मैं समझता हूं कि यह क्यों काम करता है धन्यवाद मेलिंग सूची स्पष्टीकरण jnicklas द्वारा - सूचक के लिए धन्यवाद। – froderik

+0

बिल्कुल सही - एक टन धन्यवाद! पुष्टि की है कि यह 'capybara-webkit' के साथ-साथ – FeifanZ

+0

ग्रेट के साथ काम करता है! बस एफवाईआई यह क्रोम ड्राइवरों के साथ भी काम करता है – Nobita

8

brutuscat's answer के एक बदलाव है कि हमारे सुविधा चश्मा (जो सभी Capybara का उपयोग करें) तय:

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

config.before(:each) do 
    # set the default 
    DatabaseCleaner.strategy = :transaction 
end 

config.before(:each, type: :feature) do 
    DatabaseCleaner.strategy = :truncation 
end 

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

config.append_after(:each) do 
    DatabaseCleaner.clean 
end 
संबंधित मुद्दे