2010-07-08 14 views
17

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

मेरे पास इसके लिए कोई ककड़ी परिदृश्य नहीं है और मैंने अभी कुछ बनाना शुरू कर दिया है। मैं ककड़ी के साथ एक शुरुआत कर रहा हूँ।

मैंने पहली बार उस बीज डेटा कार्य को एक दी गई रेखा में रखा है, लेकिन यह सभी परिदृश्यों के लिए बहुत कुछ दिया गया है, और यह परिदृश्यों को देखने वाले गैर-प्रोग्रामर को अधिक समझ नहीं आता है (मनुष्यों के लिए, यह ऐसा दिया गया है कि इसे जानबूझकर व्यक्त करने की आवश्यकता नहीं है) इसलिए मैंने इसे hooks.rb में स्थानांतरित कर दिया।

मेरी पहली परिदृश्य इस तरह दिखता है:

 
    1 Feature: Place an order 
    2 In order to keep orders in the database 
    3 As a admin 
    4 I want to place orders 
    5 
    6 Scenario: Using common legs 
    7 Given I have 1 customers 
    8 And I'm on the homepage 
    9 And I follow "Place an Order" 
10 When I select the customer 
11 And I select the SSLine 
12 And I click "Use Common Legs" 
13 Then I should see "PICKUP AT" 
14 And I should see "DELIVER TO" or "LOAD AT" 
15 And I should see EMPTY RETURN 

मेरे hooks.rb इस तरह दिखता है:

1 Before do 
2 MinimumData.new('costi', '1234').populate #username and password 
3 end 

सवाल:

  1. मैं इस MinimumData चलाने के लिए नहीं करना चाहती। प्रत्येक परिदृश्य से पहले कार्य को पॉप्युलेट करें क्योंकि इसमें 8 सेकंड लगते हैं। क्या मुझे इसे वैश्विक स्तर पर एक बार चलाने चाहिए? कैसे?
  2. क्या मुझे डेटाबेस को After.do के साथ साफ करना है? मैं वास्तव में ऐसा नहीं करना चाहता, क्योंकि मैं After.do में तर्क को डुप्लिकेट करूँगा, केवल Model.delete_all स्टेटमेंट के साथ। मैंने देखा कि मेरे पहले भाग के बाद, परीक्षण डीबी में अभी भी वह डेटा है। मैं इसे रेक डीबी के साथ शुद्ध कर सकता हूं: परीक्षण: शुद्ध करें और इसे फिर से शुरू करें। क्या यह एक अच्छा अभ्यास है?

उत्तर

22

मुझे ककड़ी में समतुल्य before(:all) पता नहीं है।

require File.dirname(__FILE__) + '/seeds' 

या वैकल्पिक रूप से

#just write the code you want to execute directly into the env.rb file 

इन: क्या तुम कर सकते हो अपने features/support/env.rb के शीर्ष पर और नीचे लाइन है कि आपके environment.rb लाइन डाल की आवश्यकता है एक फाइल करने के लिए अपने बीज जोड़ने कहना features/support/seeds.rb और उसके बाद है अपने उपलब्ध ब्लॉक env.rb

Before do 
    #this code is run before each scenario 
end 

after do 
    #this code is run after each scenario 
end 

at_exit do 
    #this code is run at the end 
end 
+1

"से पहले क्या" writte होना चाहिए "ऐसा करने से पहले", एक अपरकेस चरित्र – 0x4a6f4672

3

ज्योफ Lanotte में जोड़ने के लिए कर रहे हैं इस सवाल का जवाब है। हालांकि मैं hooks पर ककड़ी विकी पेज पर एक लिंक जोड़ूंगा जो इन और अन्य उदाहरणों का वर्णन करता है।

+0

और यहाँ के साथ शुरू मैंने सोचा कि मैं चालाक जा रहा था! :) धन्यवाद! –

7

जेफ लैनोट के जवाब में एक सुधार। यह

बजाय एक पूंजी बी के साथ

 
Before do 
    # this code is run before each scenario 
end 

होना चाहिए अपने env.rb फ़ाइल में कोड के इस प्रकार डालने की, हालांकि, आप अपने सुविधाओं/समर्थन में एक नई फ़ाइल में रख सकते हैं निर्देशिका, उदाहरण के लिए एक "hooks.rb" फ़ाइल। ऐसा इसलिए है क्योंकि अगर आप ककड़ी-रेल को अपग्रेड करते हैं तो env.rb फ़ाइल स्वचालित रूप से पुन: उत्पन्न होती है।

अधिक यहाँ जानकारी: https://github.com/cucumber/cucumber/wiki/Hooks

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