RSpec - Stubs
Wenn Sie den Abschnitt über RSpec Doubles (auch bekannt als Mocks) bereits gelesen haben, haben Sie RSpec Stubs bereits gesehen. In RSpec wird ein Stub oft als Methodenstub bezeichnet. Dies ist eine spezielle Art von Methode, die für eine vorhandene Methode oder für eine Methode, die noch nicht einmal existiert, „steht“.
Hier ist der Code aus dem Abschnitt über RSpec Doubles -
class ClassRoom
def initialize(students)
@students = students
End
def list_student_names
@students.map(&:name).join(',')
end
end
describe ClassRoom do
it 'the list_student_names method should work correctly' do
student1 = double('student')
student2 = double('student')
allow(student1).to receive(:name) { 'John Smith'}
allow(student2).to receive(:name) { 'Jill Smith'}
cr = ClassRoom.new [student1,student2]
expect(cr.list_student_names).to eq('John Smith,Jill Smith')
end
end
In unserem Beispiel stellt die Methode allow () die Methodenstubs bereit, die zum Testen der ClassRoom-Klasse erforderlich sind. In diesem Fall benötigen wir ein Objekt, das sich wie eine Instanz der Student-Klasse verhält, aber diese Klasse existiert (noch) nicht. Wir wissen, dass die Student-Klasse eine name () -Methode bereitstellen muss, und wir verwenden allow (), um einen Methodenstub für name () zu erstellen.
Zu beachten ist, dass sich die Syntax von RSpec im Laufe der Jahre etwas geändert hat. In älteren Versionen von RSpec würden die obigen Methodenstubs wie folgt definiert:
student1.stub(:name).and_return('John Smith')
student2.stub(:name).and_return('Jill Smith')
Nehmen wir den obigen Code und ersetzen Sie die beiden allow() Zeilen mit der alten RSpec-Syntax -
class ClassRoom
def initialize(students)
@students = students
end
def list_student_names
@students.map(&:name).join(',')
end
end
describe ClassRoom do
it 'the list_student_names method should work correctly' do
student1 = double('student')
student2 = double('student')
student1.stub(:name).and_return('John Smith')
student2.stub(:name).and_return('Jill Smith')
cr = ClassRoom.new [student1,student2]
expect(cr.list_student_names).to eq('John Smith,Jill Smith')
end
end
Sie sehen diese Ausgabe, wenn Sie den obigen Code ausführen -
.
Deprecation Warnings:
Using `stub` from rspec-mocks' old `:should` syntax without explicitly
enabling the syntax is deprec
ated. Use the new `:expect` syntax or explicitly enable `:should` instead.
Called from C:/rspec_tuto
rial/spec/double_spec.rb:15:in `block (2 levels) in <top (required)>'.
If you need more of the backtrace for any of these deprecations
to identify where to make the necessary changes, you can configure
`config.raise_errors_for_deprecations!`, and it will turn the
deprecation warnings into errors, giving you the full backtrace.
1 deprecation warning total
Finished in 0.002 seconds (files took 0.11401 seconds to load)
1 example, 0 failures
Es wird empfohlen, die neue allow () -Syntax zu verwenden, wenn Sie Methodenstubs in Ihren RSpec-Beispielen erstellen müssen. Wir haben hier jedoch den älteren Stil bereitgestellt, damit Sie ihn erkennen, wenn Sie ihn sehen.