Bazılarınızın, aklımı bu konuda şüphe duyduğunu biliyorum. Sahip olduğu bir JSON özniteliğinin içinde kazmak için eksik yöntemi kullanan bir ActiveRecord
sınıfım var.Raylar/Rspec yanıtı_bir metod_yatırma arayışı
# app/models/request_interactor.rb
...
def method_missing(method_sym, *arguments, &block)
return self.request_params[method_sym.to_s] if self.request_params[method_sym.to_s]
super
end
testi ben test içindeki bağlayıcı denedim bu
before(:each) do
@ri = RequestInteractor.create(result: {magic_school: true, magic_learnt: 'all things magical'}, request_params: {application_id: 34, school_id: 20, school_name: 'Hogwarts', course_name: 'Defence against the Dark Arts.'})
end
it 'should respond to attributes set in the request parameters' do
expect(@ri).to respond_to(:school_name)
expect(@ri.school_name).to eq('Hogwarts')
end
, @ri.school_name
'Hogwarts'
eq olacak gibi görünüyor, ama responds_to
çalıştırılırken böyle bir yöntem yoktur söyleyerek başarısız olur! Kirli, kirli yalancı!
ben modelinde böyle bir şey yaptığını çalıştı:
def respond_to?(method, include_private = false)
super || self.respond_to?(method, include_private)
end
Ama bu yüzden şimdi benim gün kaderi olduğunu .. çünkü ya yinelenen, çünkü ya yinelenen, çok derin bir yığın seviyesini geri döner sizin eller! Aydınlat beni Eksik olan yönteme yanıtı nasıl test ederim.
Hey @muichkine Önerileriniz için teşekkürler, temsilci desenini kullanmayı düşünmedim, gerçekten beğendim! Kullanmakta olduğum tek rezervasyon, 'request_params'ın bir JSON nesnesi olmasıdır, bu yüzden bu bir karma değeriymiş gibi erişmelidir. Bu yüzden belki de yöntem eksik bırakılır ve ardından yanıt için bir kanca sağlamak üzere temsilci deseni kullanılır. İstek paramları, nesneye önceden atanmış olarak ayarlanmış ve RI nesnesi sadece çok daha sonra kaydedildi, bu yüzden erişimcileri metalamak için bir 'before_save' filtresi kullanmam gerekiyordu. En iyi gibi göründüğü delegasyon desenini deneyeyim :) TY – TheLegend