आरएसपीईसी में: क्या मैं एक चेक को एक संदेश से जोड़ सकता हूं जैसा कि मैं xUnit शैली परीक्षण ढांचे में करता हूं? कैसे?rspec चेक को संदेश कैसे संलग्न करें?
assert_equal value1, value2, "something is wrong"
आरएसपीईसी में: क्या मैं एक चेक को एक संदेश से जोड़ सकता हूं जैसा कि मैं xUnit शैली परीक्षण ढांचे में करता हूं? कैसे?rspec चेक को संदेश कैसे संलग्न करें?
assert_equal value1, value2, "something is wrong"
should
और should_not
एक दूसरा तर्क ले (message
) जो मैचर के डिफ़ॉल्ट को ओवरराइड करता है संदेश।
1.should be(2), 'one is not two!'
हालांकि डिफ़ॉल्ट संदेश आमतौर पर बहुत उपयोगी होते हैं।
अद्यतन:
RSpec 3 के लिए:
expect(1).to eq(2), "one is not two!"
आरएसपीसी में, यह एक समझदार विफलता संदेश मुद्रित करने के लिए matcher का काम है। आरएसपीईसी के साथ शिप करने वाले जेनेरिक मैचर्स स्पष्ट रूप से केवल सामान्य गैर-वर्णना विफलता संदेशों को प्रिंट कर सकते हैं, क्योंकि वे आपके विशेष डोमेन के बारे में कुछ नहीं जानते हैं। यही कारण है कि यह अनुशंसा की जाती है कि आप अपना स्वयं का डोमेन-विशिष्ट मैचर्स लिखें, जो आपको अधिक पठनीय परीक्षण और अधिक पठनीय विफलता संदेश देगा।
require 'rspec/expectations'
RSpec::Matchers.define :be_a_multiple_of do |expected|
match do |actual|
(actual % expected).zero?
end
failure_message_for_should do |actual|
"expected that #{actual} would be a multiple of #{expected}"
end
failure_message_for_should_not do |actual|
"expected that #{actual} would not be a multiple of #{expected}"
end
description do
"be multiple of #{expected}"
end
end
नोट::
यहाँ RSpec documentation से एक उदाहरण है केवल match
की आवश्यकता है, दूसरों को बना दी जाएगी। हालांकि, आपके प्रश्न का पूरा बिंदु निश्चित रूप से है कि आप डिफ़ॉल्ट संदेशों की तरह नहीं करते हैं, इसलिए आपको कम से कम failure_message_for_should
को परिभाषित करने की आवश्यकता है।
इसके अलावा, यदि आप सकारात्मक और नकारात्मक मामले में अलग-अलग तर्क की आवश्यकता है तो match
के बजाय match_for_should
और match_for_should_not
को परिभाषित कर सकते हैं।
@Chris Johnsen के रूप में दिखाता है, आप स्पष्ट रूप से उम्मीद के लिए एक संदेश भी पारित कर सकते हैं। हालांकि, आप पठनीयता लाभ खोने का जोखिम चलाते हैं।
user.permissions.should be(42), 'user does not have administrative rights'
इस के साथ
:
इसकी तुलना
user.should have_administrative_rights
(मोटे तौर पर) इस तरह लागू किया जाएगा कि:
require 'rspec/expectations'
RSpec::Matchers.define :have_administrative_rights do
match do |thing|
thing.permissions == 42
end
failure_message_for_should do |actual|
'user does not have administrative rights'
end
failure_message_for_should_not do |actual|
'user has administrative rights'
end
end
धन्यवाद, मुझे नहीं पता था कि मैचर्स को परिभाषित करने का मानक तरीका इतना आसान है। हालांकि मैं "आलसी" होना पसंद करता हूं: ऐसी चीजों को अलग-अलग नामित इकाइयों में कारगर करने के लिए जब वे कम से कम दो बार प्रकट होते हैं या उल्लेखनीय रूप से संदर्भ को सरल बनाते हैं जहां उनका उपयोग किया जाता है। – Alexey
मेरे मामले में यह कोष्ठक की एक समस्या थी:
expect(coder.is_partial?(v)).to eq p, "expected #{v} for #{p}"
इस तर्क का एक गलत नंबर में हुई है, जबकि सही तरीका है:
expect(coder.is_partial?(v)).to eq(p), "expected #{v} for #{p}"
बहुत बहुत धन्यवाद! यह कार्य करता है! –
कोई इसे #Should ==' के साथ कैसे करता है? –
@mohawkjohn: ऐसा लगता है जैसे यह कुछ होगा 1. 1. शॉल (शून्य, 'एक दो नहीं है!') == 2' (ick), लेकिन यह काम करता है क्योंकि '==' ऑपरेटर मैचर ऐसा लगता है कि यह हमेशा अपना संदेश उत्पन्न करता है। –