From 7dd77a2096eb0652bfcef1981c92a84e2a87f6f9 Mon Sep 17 00:00:00 2001 From: Michael Miller Date: Thu, 14 Jul 2022 13:18:13 -0600 Subject: [PATCH] Add spec for doubles docs --- spec/docs/doubles_spec.cr | 79 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 spec/docs/doubles_spec.cr diff --git a/spec/docs/doubles_spec.cr b/spec/docs/doubles_spec.cr new file mode 100644 index 0000000..be28c3d --- /dev/null +++ b/spec/docs/doubles_spec.cr @@ -0,0 +1,79 @@ +require "../spec_helper" + +# https://gitlab.com/arctic-fox/spectator/-/wikis/Doubles +Spectator.describe "Doubles Docs" do + let(answer) { 42 } + + double :my_double, answer: 5 do + def answer(arg1, arg2) + arg1 + arg2 + end + end + + it "does something" do + dbl = double(:my_double, answer: answer) + expect(dbl.answer).to eq(42) + expect(dbl.answer(1, 2)).to eq(3) + end + + class Emitter + def initialize(@value : Int32) + end + + def emit(target) + target.call(@value) + end + end + + context "Expecting Behavior" do + describe Emitter do + subject { Emitter.new(42) } + + double :target, call: nil + + describe "#emit" do + it "invokes #call on the target" do + target = double(:target) + subject.emit(target) + expect(target).to have_received(:call).with(42) + end + end + end + + it "does something" do + dbl = double(:my_double) + allow(dbl).to receive(:answer).and_return(42) # Merge this line... + dbl.answer + expect(dbl).to have_received(:answer) # and this line. + end + + it "does something" do + dbl = double(:my_double) + expect(dbl).to receive(:answer).and_return(42) + dbl.answer + end + end + + context "Class Doubles" do + double :my_double do + # Define class methods with `self.` prefix. + stub def self.something + 42 + end + end + + it "does something" do + # Default stubs can be defined with key-value pairs (keyword arguments). + dbl = class_double(:my_double, something: 3) + expect(dbl.something).to eq(3) + + # Stubs can be changed with `allow`. + allow(dbl).to receive(:something).and_return(5) + expect(dbl.something).to eq(5) + + # Even the expect-receive syntax works. + expect(dbl).to receive(:something).and_return(7) + dbl.something + end + end +end