2011-08-03 15 views
5

मैं ककड़ी परीक्षण के लिए नया हूं।ककड़ी की विशेषताएं और चरण परिभाषाएं

मैं बनाया है दो विशेषताएं फ़ाइलें:

events.feature 
partner.feature 

और एक step_definitions फ़ोल्डर में मेरी कदम परिभाषाएं हैं:

./step_definitions/ 
    events.rb 
    partner.rb 

ऐसा लगता है कि ककड़ी चरण जानकारी के लिए सभी .rb फाइलों में लग रहा है ।

क्या कोई विशिष्ट चरण परिभाषा फ़ाइल देखने के लिए सुविधा को सीमित करने का कोई तरीका है?

कारण यह है कि मैं ऐसा क्यों करना चाहता हूं, क्योंकि मुझे आश्चर्यजनक मिलान त्रुटियां मिल रही हैं, भले ही मैं --guess ध्वज का उपयोग करता हूं।

कारण यह है कि मैं ऐसा क्यों करना चाहता हूं निम्नलिखित कारणों से है। मैं एक सीएमएस का परीक्षण कर रहा हूं, और विभिन्न सुविधाओं में प्रत्येक अलग-अलग सामग्री प्रकारों (घटनाओं & भागीदारों) का परीक्षण करना चाहता हूं।

events.feature

Feature: Add partner 
    As an administrator I can add a new partner 

    Scenario: Create partner 
    Given I am logged in 
    When I create a partner 
    Then I should see content 

partner.feature

Feature: Add event 
    As an administrator I can add a new event 

    Scenario: Create event 
    Given I am logged in 
    When I create an event 
    Then I should see content 

बस पर जो दोनों स्थितियों में है 'तो मैं सामग्री देखना चाहिए' ध्यान केंद्रित कर, त्रुटि क्योंकि .rb फ़ाइलों में होता है मैं शामिल करने की जरूरत:

partners.rb

Then /^I should see content$/ do 
    BROWSER.html.should include('SOME PARTNER CONTENT') 
end 

events.rb

Then /^I should see content$/ do 
    BROWSER.html.should include('SOME EVENT CONTENT') 
end 

जिसका अर्थ है की "मैं सामग्री देखना चाहिए" एक अस्पष्ट मिलान नहीं है।

मैं समझता हूँ कि वहाँ संरचना के इस अलग तरीके हैं, यानी मैं एक सामग्री सुविधा बना सकते हैं, और प्रयोग परिदृश्य की रूपरेखा:

Feature: Add content 
    As an administrator I can add a new content 

    Scenario Outline: Create content 
    Given I am logged in 
    When I create an <content type> 
    Then I should see <example content> 

    Examples: 
    |event |March Event | 
    |partner |Joe Blogs | 

लेकिन मैं क्योंकि मैं प्रत्येक सामग्री को संपुटित करना चाहते हैं यह करने के लिए नहीं करना चाहते हैं अपनी खुद की टेस्ट फीचर टाइप करें।

इसलिए अनिवार्य रूप से मुझे यह पता लगाने की ज़रूरत है कि मैं जिस सुविधा का परीक्षण कर रहा हूं उसके अनुसार विशिष्ट चरण फ़ाइलों को कैसे चलाया जाए।

उत्तर

9

ककड़ी हमेशा सभी फाइलें लोड करती है और मुझे नहीं लगता कि इस व्यवहार को ओवरराइड करने का एक तरीका है।अस्पष्ट चरणों के साथ अपनी समस्या के बारे में - समाधान आसान है - आपके चरणों

Then /^(?:|I)should see "([^"]*)"$/ do |text| 
    page.should have_content(text) 
end 

करने और स्थितियों में पैरामीटर जोड़ बस इसे इस

की तरह फोन तो मैं "सहयोगी सामग्री"

  • देखना चाहिए मुफ्त बोनस - आपका परिदृश्य अब और अधिक पठनीय है
+0

मैं इस तरह से सहमत हूं। यह भी बहुत अधिक अभिव्यक्तिपूर्ण है, क्योंकि आपके कदम होना चाहिए। –

1

मुझे आपके द्वारा सुझाए गए वैकल्पिक दृष्टिकोण के साथ कुछ भी गलत नहीं दिख रहा है। तार्किक डोमेन में चरण परिभाषाओं को अलग करना समझ में आता है। हालांकि, ऐसा लगता है कि आप इसे बहुत दूर ले जाने की कोशिश कर रहे हैं, और यह आपको डुप्लीकेट कोड और असंख्य मैचों के साथ मुद्दों का एक अच्छा सौदा करने जा रहा है जैसे आप अब देख रहे हैं। मैं कुछ इस तरह कर रही होगी की सलाह देते हैं:

Feature: Add partner 
    As an administrator I can add a new partner 

    Scenario: Create partner 
    Given I am logged in 
    When I create a partner 
    Then I should see "partner content" 

और, इसी तरह, आपके घटना सुविधा में:

... 
Then I should see "event content" 

तो फिर तुम एक अलग step_definitions/common_steps.rb फ़ाइल में निम्न हो सकते हैं:

Then /I should see "(.*)"$/ do |content| 
    BROWSER.html.should include(content) 
end 

इस चरण में इसके बारे में कोई साझेदार/घटना विशिष्ट नहीं है। इसके बजाय, परिदृश्य में आपकी विशेषताओं के लिए डेटा-विशिष्ट स्ट्रिंग शामिल हैं।

यदि आप रेल ऐप पर काम कर रहे हैं, तो cucumber-rails मणि वास्तव में आपके लिए वेब एप्लिकेशन परीक्षण के लिए सामान्य चरणों का एक समूह बना देगा। यहां तक ​​कि यदि आप रेल का उपयोग नहीं कर रहे हैं, तो इन steps में से कुछ को देखने के लिए उपयोगी हो सकता है।

+0

हाँ - मैं डुप्लिकेट कोड के बारे में आपका बिंदु देखता हूं - धन्यवाद। – JonB

0

मैं इसे ढूंढ रहा हूं, लेकिन ऐसा लगता है कि "बॉक्स से बाहर" संभव नहीं है।

मेरे समाधान इस तरह के वर्ग के नाम के रूप में चरण हमेशा अतिरिक्त वर्णन किसी तरह का उपयोग करते हुए, अंतर करने के लिए, उदाहरण के लिए है:

Scenario: Buildings List 
    Given I have a Building with code "B1" 
    And I have a Building with code "B2" 
    When I go to the list of buildings 
    Then I should see "B1" building code 
    And I should see "B2" building code 

ये "बिल्डिंग कोड" विवरण आप सभी की अलग अलग फ़ाइलों के बीच चरणों पुनः उपयोग न करने की जरूरत है/डोमेन

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