2011-12-05 13 views
42

का उपयोग कर सामग्री मैं बहुत की तरह एक परीक्षण है। क्या मेरी अपेक्षाओं को बताने का एक और संक्षिप्त तरीका है। मैंने दस्तावेज़ों को देखा है लेकिन मैं नहीं देख सकता कि मेरी अपेक्षाओं को कहां कंप्रेस करना है। धन्यवाद।परीक्षण हैश RSpec

उत्तर

78

http://rubydoc.info/gems/rspec-expectations/RSpec/Matchers:include

यह बहुत हैश के लिए काम करता है: @ करने के लिए दाऊद के जवाब जोड़ने

jump_locations.should include(
    "upper_left" => true, 
    "upper_right" => false, 
    "lower_left" => false, 
    "lower_right" => true 
) 
+11

धन्यवाद, डेविड। बीटीडब्ल्यू विशाल प्रशंसक। वास्तव में आरएसपीसी पुस्तक का आनंद लिया। –

+0

मेरी इच्छा है कि एक समान विधि थी जैसे match_array –

+0

फैनेज डेविड पर डितो! आपका "रूपेक बुक" अच्छी तरह से थंब गया है! –

18

बस चाहता हूँ। आप अपने include हैश में मैचर्स का घोंसला और उपयोग कर सकते हैं। उदाहरण के लिए:

# Pass 
expect({ 
    "num" => 5, 
    "a" => { 
    "b" => [3, 4, 5] 
    } 
}).to include({ 
    "num" => a_value_between(3, 10), 
    "a" => { 
    "b" => be_an(Array) 
    } 
}) 

एक चेतावनी: एक नेस्टेड include हैश सभी कुंजियों का परीक्षण करना चाहिए या परीक्षण असफल हो जायेगी, जैसे:

# Fail 
expect({ 
    "a" => { 
    "b" => 1, 
    "c" => 2 
    } 
}).to include({ 
    "a" => { 
    "b" => 1 
    } 
}) 
+4

आप नेस्ट का उपयोग करके अपने चेतावनी हल कर सकते हैं शामिल हैं: '' 'उम्मीद ({ " एक "=> { " बी "=> 1, " सी "=> 2 } }) शामिल करने के लिए (। { "ए" => शामिल हैं ({ "बी" => 1 }) }) '' – AngelCabo

+0

अधिकांश मैचर्स में "क्रिया" और लंबा "संज्ञा" उपनाम दोनों होते हैं, बाद में घोंसले के दौरान बेहतर पढ़ सकते हैं: ' उम्मीद करें ({"a" => {"b" => 1, "c" => 2}})। ({"a" => a_hash_including ({"b" => 1})})। http://timjwade.com/2016/08/01/testing-json-apis-with-rspec-composable-matchers.html इस पर एक अच्छा ब्लॉग पोस्ट है। –

2

सिंटेक्स RSpec 3 के लिए बदल गया है, लेकिन मिलान में शामिल हैं अब भी है एक:

expect(jump_locations).to include(
    "upper_left" => true, 
    "upper_right" => false, 
    "lower_left" => false, 
    "lower_right" => true 
) 

built-in-matchers#include-matcher देखें।

0

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

it 'is to be a Hash Object' do 
    workbook = {name: 'A', address: 'La'} 
    expect(workbook.is_a?(Hash)).to be_truthy 
end