2012-02-29 12 views
5

इस परिदृश्य पर काफी रकम ऊपर मेरी समस्या इंजेक्षन करने के लिए:परीक्षण ककड़ी/अरूबा/Timecop के साथ एक कमांडलाइन आवेदन: संदर्भ

Scenario: problems with subprocesses 
    Given the date is 01/01/2012 10:31 
    When I run `ruby -e "puts Time.now"` 
    Then the output should contain "10:31" 

यह नीचे When I run ruby -e "puts Time.now" एक बच्चे की प्रक्रिया शुरू करने और इस तरह के सभी बनाने के लिए फोड़े मेरा Timecop.freeze स्टब्स अप्रभावी है, क्योंकि वे केवल मुख्य प्रक्रिया पर काम करते हैं। मुझे किसी भी तरह से चलने वाले आदेश में वर्तमान संदर्भ को 'इंजेक्ट' करने की ज़रूरत है, लेकिन मुझे कुछ भी आने में असमर्थ लगता है। क्या मैं यहां कुछ असंभव कोशिश कर रहा हूं?


कदम:

require 'timecop' 
Given /^the date is (\d+)\/(\d+)\/(\d+) (\d+):(\d+)$/ do |month, day, year, hour, minute| 
    Timecop.freeze(Time.local(year.to_i, month.to_i, day.to_i, hour.to_i , minute.to_i, 0)) 
end 

उत्तर

1

मैं 2 विकल्प यहाँ देखें।

  1. परीक्षण है कि आप आपको लगता है कि आप परीक्षण कर रहे कमांड लाइन अनुप्रयोग के लिए एक 'वर्तमान समय' पैरामीटर जोड़ सकता है, आवश्यक संदर्भ सुई का उपयोग कर सकते इस उदाहरण में के तहत प्रणाली में एक हुक बनाएँ। वैकल्पिक रूप से ऐप्स कॉन्फ़िगरेशन फ़ाइल या डेटाबेस में एक निश्चित समय निर्दिष्ट करें, कई विकल्प हैं। यह मानता है कि आप जिस ऐप का परीक्षण कर रहे हैं उसका स्वामित्व है और ऐसे बदलाव कर सकता है। यह केवल एक बहुत छोटा बदलाव होना चाहिए, उदा। यदि 'वर्तमान समय' पैरामीटर निर्दिष्ट है, तो उस समय उस समय को फ्रीज करने के लिए टाइमकॉप का उपयोग करें।

  2. सिस्टम को ककड़ी प्रक्रिया में परीक्षण के तहत लाने के लिए कुछ रास्ता खोजें। ruby -e "puts Time.now" पर खोलने के बजाय आपके उदाहरण में, आप instance_eval "puts Time.now" कर सकते हैं। अधिक यथार्थवादी, आप require ऐप कर सकते हैं, और यदि कमांड लाइन धावक वास्तव में कुछ कक्षाओं के आसपास एक पतली आवरण है जो वास्तव में काम करता है, तो आप उन्हें सीधे कॉल कर सकते हैं। वैकल्पिक रूप से, आप जो भी एआरजीवी पैरामीटर अपेक्षित हैं, उन्हें पॉप्युलेट करने में सक्षम हो सकते हैं, puts विधि का नकल करें, और केवल require फ़ाइल, जो आपको प्रक्रिया से बाहर चलाने के लिए एक करीबी अनुभव देनी चाहिए, लेकिन आप टाइमकॉप प्रभावी ढंग से उपयोग करने में सक्षम होंगे ।

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