ruby - Rspec जाँच करने के लिए संदेश कैसे संलग्न करें?




tdd xunit (2)

RSpec में, यह समझदार विफलता संदेश प्रिंट करने के लिए मिलानकर्ता का काम है। RSpec के साथ जहाज बनाने वाले सामान्य मिलान स्पष्ट रूप से केवल सामान्य गैर-वर्णन विफलता संदेश प्रिंट कर सकते हैं, क्योंकि वे किसी विशेष डोमेन के बारे में कुछ भी नहीं जानते हैं। इसलिए यह अनुशंसा की जाती है कि आप अपने स्वयं के डोमेन-विशिष्ट मिलान लिखें, जो आपको अधिक पठनीय परीक्षण और अधिक पठनीय विफलता संदेश देगा।

यहाँ RSpec प्रलेखन से एक उदाहरण है:

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

नोट: केवल match की आवश्यकता है, दूसरों को स्वचालित रूप से उत्पन्न किया जाएगा। हालाँकि, आपके प्रश्न का पूरा बिंदु यह है कि आप डिफ़ॉल्ट संदेशों को पसंद नहीं करते हैं , इसलिए आपको कम से कम failure_message_for_should को भी परिभाषित failure_message_for_should

इसके अलावा, यदि आप सकारात्मक और नकारात्मक मामले में अलग-अलग तर्क की जरूरत है, तो आप match बजाय match_for_should और match_for_should_not को परिभाषित कर सकते हैं।

जैसा कि @ क्रिस जॉन्सन दिखाते हैं, आप अपेक्षा के अनुरूप एक संदेश भी पास कर सकते हैं। हालाँकि, आप पठनीयता के लाभ को खोने का जोखिम उठाते हैं।

इसकी तुलना करें:

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

Rspec में: क्या मैं एक चेक को उसी तरह एक संदेश संलग्न कर सकता हूं जैसे मैं xUnit स्टाइल टेस्ट फ्रेमवर्क में करूंगा? कैसे?

assert_equal value1, value2, "something is wrong"

मेरे मामले में यह कोष्ठक की समस्या थी:

        expect(coder.is_partial?(v)).to eq p, "expected #{v} for #{p}"

इसके परिणामस्वरूप गलत तर्क दिए गए, जबकि सही तरीका यह है:

        expect(coder.is_partial?(v)).to eq(p), "expected #{v} for #{p}"




xunit