In rspec möchten Sie häufig eine Methode verspotten, um das Testen zu vereinfachen.
Im folgenden Beispiel wird die Methode "admin?" Von der Methode "set_complex_config" beeinflusst.
Die Methode set_complex_config
hat bereits einen eigenen Testcode und Sie möchten nur die Antwort.
#Codebeispiel ist angemessen
class User
def admin?
res = set_complex_config
case res
when 'hoge'
'hoge'
when 'fuga'
'fuga'
end
end
def set_complex_config
#Komplexe Verarbeitung
end
end
Ich kann mir zwei Möglichkeiten vorstellen, mich in einem solchen Fall zu verspotten, also habe ich mir überlegt, welche besser ist.
So überschreiben Sie die set_complex_config-Methode der User-Klasse mit der Singleton-Methode (siehe unten).
let(:hoge_let) { 'hoge' }
it do
user = create(:user)
hoge_var = 'hoge'
user.define_singleton_method(:set_complex_config) { hoge_var }
user.set_complex_config =>Bewegung
user.define_singleton_method(:set_complex_config) { hoge_let }
user.set_complex_config => wrong number of arguments (given 0, expected 2..3)
end
Auf den ersten Blick sieht es cool aus, aber in diesem Fall kann der Block der Methode define_singleton_method im Beispiel oder vor dem Block die Variable let nicht lesen.
Die Methode allow funktioniert einwandfrei.
let(:hoge_let) { 'hoge' }
it do
user = create(:user)
allow(user).to receive(:attributes).and_return(hoge_let)
user.set_complex_config =>Bewegung
end
Es scheint besser zu sein, allow (). To Receive (). And_return ()
gehorsam zu verwenden.
Recommended Posts