मैं रूबी में नया हूं और मैं लॉगिन क्रेडिट का उपयोग करने से आगे नहीं बढ़ सकता। एक रूबी परियोजना के लिए एक yml फ़ाइल से। मेरे पास एक मूल yml फ़ाइल है

login:
  urls:
    gmail: "https://accounts.google.com/signin"
  users:
        username: something
        password: something_new

मैंने एक yml.rb बनाया है जिसमें yml की आवश्यकता है, और yml पथ तक पहुंचें और फ़ाइल लोड करें। लेकिन मुझे नहीं पता कि मेरे test.rb में उपयोगकर्ता/उपयोगकर्ता नाम ... के माध्यम से कैसे जाना है :(। मैंने वाईएमएल कक्षा को स्टोर करने के लिए एक चर "इसे" में जोड़ा है और अंत में मैं कोशिश कर रहा हूं

expect data['valid_user']

expect data['login']['urls']['gmail']
expect data['login']['users']['username'] 

लेकिन टर्मिनल में मुझे वें त्रुटि प्राप्त होती है "NoMethodError: अपरिभाषित विधि `[]' शून्य के लिए: NilClass "

अपडेट करें ये रहा मेरा yml.rb

require 'rspec'
require 'yaml'

class YamlHelper
  @env = {}
  def initialize
    file = "#{Dir.pwd}path of yml file"
    @env = YAML.load_file(file)
  end

  def get_variables
    @env
  end
end

यहाँ मेरी test.rb फ़ाइल है

describe 'My behaviour' do
  before(:each) do
    @browser = Selenium::WebDriver.for :firefox 
  end
  it 'verifies yml login' do
    yaml_helper = YamlHelper.new
    data = yaml_helper.get_variables
    expect data['valid_user']
    expect test_data['login']['urls']['gmail']
    expect test_data['login']['users']['username']
    expect test_data['login']['users']['password']
  end
  after(:each) do @browser.quit   
 end

क्या कोई देख सकता है? अग्रिम में धन्यवाद

आपका दिन अच्छा हो

0
Mary 25 मई 2018, 14:42

1 उत्तर

सबसे बढ़िया उत्तर

ऐसा लगता है कि कोड वहां लगभग है। जब मैं इस तरह की चीज़ को डिबग कर रहा होता हूं, तो मैं अक्सर इसे सबसे पहले सबसे बुनियादी परीक्षण तक पहुंचाने की कोशिश करता हूं

कुछ इस तरह:

require 'yaml'
file = "#{Dir.pwd}/data.yml"
data = YAML.load_file(file)

data['valid_user']
#=> nil

data['login']['urls']['gmail']
#=> "https://accounts.google.com/signin"

data['login']['users']['username']
#=> "something"

ऊपर से आप देख सकते हैं कि आपकी test.rb फ़ाइल में शायद एक टाइपो है: test_data सबसे अधिक संभावना data होनी चाहिए। साथ ही, आपकी YAML फ़ाइल में valid_user कुंजी नहीं है, इसलिए आप शायद इसे परीक्षण से हटाना चाहते हैं, कम से कम अभी के लिए।

अन्य दो चाबियाँ ठीक लोड होती हैं।

आपको जो त्रुटि दिखाई दे रही है NoMethodError: undefined method '[]' for nil:NilClass का अर्थ है कि आप जिन हैश का उपचार कर रहे हैं उनमें से एक हैश वास्तव में nil है। जब आप नेस्टेड हैश में गोता लगा रहे हों तो इस प्रकार की बग काफी आम है। इसका मतलब दो चीजों में से एक है:

  1. आप सही ढंग से हैश में उतरे हैं, लेकिन डेटा YAML में मौजूद नहीं है।
  2. डेटा वाईएएमएल में मौजूद है, लेकिन आप इसे सही तरीके से नहीं प्राप्त कर रहे हैं।

एक बदलाव जो आप कर सकते हैं, वह इस कोड को थोड़ा और अधिक लचीला बना देगा:

test_data['login']['users']['username']

साथ:

test_data.dig('login', 'users', 'username')

बाद वाला dig का उपयोग करता है, जो डेटा संरचना में जाता है और आपके बाद के मूल्य को वापस करने का प्रयास करता है, लेकिन अगर इसे किसी भी बिंदु पर nil वापस मिलता है तो यह अपवाद फेंकने के बजाय nil वापस आ जाएगा।

अंत में, आपके द्वारा यहां चिपकाए गए परीक्षण के लिए, आपको before(:each) या after(:each) ब्लॉक की आवश्यकता नहीं है - सेलेनियम केवल ब्राउज़र परीक्षण के लिए आवश्यक है।

0
spikeheap 25 मई 2018, 17:22