কোনও বৈশিষ্ট্যে বর্ণিত ফর্ম জমা দেওয়ার সময় আমি কোনও মডেলটিতে অনেক পরিবর্তন পরীক্ষা করতে চাই। উদাহরণস্বরূপ, আমি নিশ্চিত করতে চাই যে ব্যবহারকারীর নামটি X থেকে Y এ পরিবর্তিত হয়েছে এবং এনক্রিপ্ট হওয়া পাসওয়ার্ডটি কোনও মান দ্বারা পরিবর্তিত হয়েছিল।
আমি জানি যে এটি সম্পর্কে ইতিমধ্যে কিছু প্রশ্ন রয়েছে তবে আমি আমার পক্ষে উপযুক্ত উত্তর খুঁজে পাইনি। সর্বাধিক সঠিক উত্তরটি ChangeMultiple
এখানে মাইকেল জনস্টনের ম্যাচারের মতো বলে মনে হচ্ছে : আরএসপেকের পক্ষে কি দুটি টেবিলের পরিবর্তনের আশা করা সম্ভব? । এর খারাপ দিকটি হ'ল একমাত্র পরিচিত মান থেকে জানা মানগুলিতে সুস্পষ্ট পরিবর্তনগুলি পরীক্ষা করে।
আমি কীভাবে আরও ভাল ম্যাচারের মতো দেখতে পেতাম সে সম্পর্কে আমি কিছু ছদ্ম কোড তৈরি করেছি:
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)