2014-09-30 12 views
5

सीखना कि कैसे 3 रुपये करना है। मेरे पास मैचर्स पर एक प्रश्न है। ट्यूटोरियल मैं अनुसरण कर रहा हूं क्यों कोड एक त्रुटि उत्पन्न कर रहा है, जबकि एक मैं बाहर टिप्पणी की मूल्यह्रास चेतावनी के साथ गुजर Rspec 2.रुपेक 3 बनाम रुपेक 2 मैटर्स

describe Team do 

    it "has a name" do 
    #Team.new("Random name").should respond_to :name 
    expect { Team.new("Random name") }.to be(:name) 
    end 


    it "has a list of players" do 
    #Team.new("Random name").players.should be_kind_of Array 
    expect { Team.new("Random name").players }.to be_kind_of(Array) 
    end 

end 

पर आधारित है।

त्रुटि

Failures: 

    1) Team has a name 
    Failure/Error: expect { Team.new("Random name") }.to be(:name) 
     You must pass an argument rather than a block to use the provided matcher (equal :name), or the matcher must implement `supports_block_expectations?`. 
    # ./spec/team_spec.rb:7:in `block (2 levels) in <top (required)>' 

    2) Team has a list of players 
    Failure/Error: expect { Team.new("Random name").players }.to be_kind_of(Array) 
     You must pass an argument rather than a block to use the provided matcher (be a kind of Array), or the matcher must implement `supports_block_expectations?`. 
    # ./spec/team_spec.rb:13:in `block (2 levels) in <top (required)>' 
+1

चेक इस [जवाब] (http://stackoverflow.com/questions/19960831/rspec-expect-vs-expect-with-block-whats-the-difference) _why? _ –

उत्तर

6

आप उन परीक्षणों के लिए सामान्य कोष्ठक का उपयोग करना चाहिए:

expect(Team.new("Random name")).to eq :name 

आप कर्ली कोष्ठक का उपयोग करते हैं, तो आप कोड का एक खंड से गुजर रहे हैं। rspec3 के लिए इसका मतलब है कि आप निष्पादन के परिणाम पर बजाय इस ब्लॉक के निष्पादन के बारे में कुछ उम्मीदों शब्दों में कहें, तो होगा उदाहरण के लिए

expect { raise 'hello' }.to raise_error 

संपादित करें:

नोट तथापि कि इस परीक्षण Team.new के रूप में, असफल हो जायेगी एक वस्तु देता है, प्रतीक नहीं। तो यह गुजरता है आप अपनी परीक्षा को संशोधित कर सकते हैं:

expect(Team.new("Random name")).to respond_to :name 

# or 

expect(Team.new("Random name").name).to eq "Random name" 
+0

के लिए मुझे इसके साथ एक त्रुटि मिलती है। https://gist.github.com/vezu/85661922adda6a877b48। विवरण के लिए आपका धन्यवाद। – Benjamin

+1

@ बेंजामिन - मैं कहूंगा कि यह अपेक्षित है, क्योंकि 'Team.new' एक ऑब्जेक्ट देता है, प्रतीक नहीं। उत्तर अपडेट किया गया। – BroiSatse

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