मैं एक मॉडल में कई बदलावों की जांच करना चाहता हूं जब एक फीचर कल्पना में एक फॉर्म सबमिट करना। उदाहरण के लिए, मैं यह सुनिश्चित करना चाहता हूं कि उपयोगकर्ता नाम को X से Y में बदल दिया गया था, और एन्क्रिप्टेड पासवर्ड को किसी भी मूल्य से बदल दिया गया था।
मुझे पता है कि इसके बारे में पहले से ही कुछ सवाल हैं, लेकिन मुझे मेरे लिए एक उचित उत्तर नहीं मिला। ChangeMultiple
माइकल जॉनसन द्वारा मैचर की तरह सबसे सटीक उत्तर यहां लगता है: क्या RSpec के लिए दो तालिकाओं में बदलाव की उम्मीद करना संभव है? । इसका नकारात्मक पक्ष यह है कि व्यक्ति केवल ज्ञात मूल्यों से ज्ञात मूल्यों के स्पष्ट परिवर्तनों की जांच करता है।
मैंने कुछ छद्म कोड बनाए कि मुझे क्या लगता है कि एक बेहतर मैचर कैसा दिख सकता है:
expect {
click_button 'Save'
}.to change_multiple { @user.reload }.with_expectations(
name: {from: 'donald', to: 'gustav'},
updated_at: {by: 4},
great_field: {by_at_leaset: 23},
encrypted_password: true, # Must change
created_at: false, # Must not change
some_other_field: nil # Doesn't matter, but want to denote here that this field exists
)
मैंने ChangeMultiple
इस तरह से माचिस का मूल कंकाल भी बनाया है :
module RSpec
module Matchers
def change_multiple(receiver=nil, message=nil, &block)
BuiltIn::ChangeMultiple.new(receiver, message, &block)
end
module BuiltIn
class ChangeMultiple < Change
def with_expectations(expectations)
# What to do here? How do I add the expectations passed as argument?
end
end
end
end
end
लेकिन अब मैं पहले से ही यह त्रुटि प्राप्त कर रहा हूं:
Failure/Error: expect {
You must pass an argument rather than a block to use the provided matcher (nil), or the matcher must implement `supports_block_expectations?`.
# ./spec/features/user/registration/edit_spec.rb:20:in `block (2 levels) in <top (required)>'
# /Users/josh/.rvm/gems/ruby-2.1.0@base/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:268:in `load'
# /Users/josh/.rvm/gems/ruby-2.1.0@base/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:268:in `block in load'
इस कस्टम मिलान बनाने में किसी भी मदद की बहुत सराहना की जाती है।
.and change { @something }.by(0)