2012-11-17 14 views
5

शीर्षक के अनुसार मैं सुझाव देता हूं कि मैं एक कस्टम सत्यापनकर्ता को टेपेक के साथ परीक्षण करने की कोशिश कर रहा हूं। मुझे एक त्रुटि मिलती है और मुझे समझ में नहीं आता क्यों ... यदि आप कुछ प्रकाश डाल सकते हैं तो मैं वास्तव में इसकी सराहना करता हूं। ये हम चले:rspec के साथ कस्टम सत्यापनकर्ता परीक्षण। मुझे प्रो क्यों मिलती है?

सत्यापनकर्ता कल्पना

require 'spec_helper' 

describe GraphDateValidator do 

    it "should not validate activity with empty start time" do 
    expect { Graph.new({start_time: ''}).valid? }.to eq(false) 
    end 
end 

अगर मैं Graph.new({start_time: ''}).valid? प्रिंट जब यह कल्पना यह एक प्रोक ऑब्जेक्ट के माध्यम से चला जाता है यह प्रिंट false

हालांकि:

expected: false 
      got: #<Proc:[email protected]/Users/MLP/... 

क्या कोई मुझे बता सकता है कि मुझे वह proc वस्तु क्यों मिल रही है? धन्यवाद!

+1

स्क्वायरली ब्रैकेट्स "{}" टाइपो का उपयोग है? आमतौर पर, यह उम्मीद है()। eq (झूठी) –

+0

मुझे बस ध्यान दें :) मैं वास्तव में इसे नहीं देख सका :) धन्यवाद। यदि आप उत्तर डालते हैं तो मैं इसे स्वीकार कर सकता हूं ... –

उत्तर

15

आपकी अपेक्षा में {} का उपयोग करके, तो आप वास्तव में उम्मीद विधि निष्पादित नहीं कर रहे हैं --- इसके बजाय आप एक ब्लॉक की अपेक्षा भेज रहे हैं। तो बेहतर शैली के लिए

it "should not validate activity with empty start time" do 
    expect(Graph.new({start_time: ''}).valid?).to eq(false) 
end 
-2

को नाम बदलने और संदेशों असफल, तुम rspec के विधेय matchers उपयोग कर सकते हैं:

it "does not accept empty start time" do 
    Graph.new({start_time: ''}).should_not be_valid 
end 

संपादित करें 1 (शैली स्वाद की व्याख्या):

यह आप की तरह पठनीय त्रुटि संदेश देता है "अपेक्षित $ foo वैध होने की उम्मीद है, लेकिन" इसके बजाय "सत्य होना गलत नहीं था"।

"बेहतर शैली" के साथ मैं एक Matcher (जैसा मैंने लिखा था) के उपयोग का संदर्भ दे रहा था, should नहीं। तो निम्नलिखित बहिष्कृत वाक्यविन्यास का उपयोग नहीं करेंगे, लेकिन अभी भी मैचर्स का उपयोग करें:

it "does not accept empty start time" do 
    expect(Graph.new({start_time: ''})).to be_valid 
end 
+0

इस तरह से बहिष्कृत किया गया है, इसलिए मुझे संदेह है कि यह "बेहतर शैली" –

+0

कम से कम यह आपको पठनीय त्रुटि संदेश देता है जैसे "अपेक्षित $ foo मान्य होने के लिए, लेकिन" "सच होना चाहिए गलत" के बजाय। "बेहतर शैली" एक मचर के उपयोग का संदर्भ दे रहा था, न कि 'चाहिए'। तो follwing बहिष्कृत वाक्यविन्यास का उपयोग नहीं करेगा, लेकिन अभी भी matchers का उपयोग करें: यह "खाली प्रारंभ समय स्वीकार नहीं करता है" उम्मीद करें (ग्राफ.न्यू ({start_time: ''}})। Be_valid अंत –