describe Account do describe "#register" do context "when params are valid" do let(:params) { {:name => "Andy"} } let(:user) { double } before { allow(User).to receive(:new) { user } } it "saves the user" do expect(user).to receive(:save) { true } subject.register(params) end it "returns :saved" do allow(user).to receive(:save) { true } expect(subject.register(params)).to eq(:saved) end end end end
describe Account do describe "#register" do context "when params are valid" do let(:params) { {:name => "Andy"} } let(:user) { double } before { allow(User).to receive(:new) { user } } it "saves the user" do expect(user).to receive(:save) { true } subject.register(params) end it "returns :saved" do allow(user).to receive(:save) { true } expect(subject.register(params)).to eq(:saved) end end end end
FIZZBUZZ Print all numbers in a range. Multiples of 3 print "Fizz" instead of the number. Multiples of 5 print "Buzz". Multiples of both 3 and 5 print "FizzBuzz". git.io/X5jVWA
describe FizzBuzz do describe "#build_list" do context "with a range of 1..15" do list = %w(1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz) it "returns #{list}" do expect(subject.build_list(1..15)).to eq(list) end end end end
class FizzBuzz def build_list(range) [].tap do |list| range.each do |n| if n % 3 == 0 list << "Fizz" elsif n % 5 == 0 list << "Buzz" else list << n.to_s end end end end end
class FizzBuzz def build_list(range) [].tap do |list| range.each do |n| if n % 3 == 0 && n % 5 == 0 list << "FizzBuzz" elsif n % 3 == 0 list << "Fizz" elsif n % 5 == 0 list << "Buzz" else list << n.to_s end end end end end
class FizzBuzz def build_list(range) [].tap do |list| range.map{ |n| Number.new(n) }.each do |n| processors.each do |processor| processor.new(list, n).process end end end end def processors [ FizzBuzzProcessor, FizzProcessor, BuzzProcessor, DefaultProcessor ] end end
describe Account do describe "#register" do context "when params are valid" do let(:params) { {:name => "Andy"} } let(:user) { double } before { allow(User).to receive(:new) { user } } it "saves the user" do expect(user).to receive(:save) { true } subject.register(params) end it "returns :saved" do allow(user).to receive(:save) { true } expect(subject.register(params)).to eq(:saved) end end end end
describe Account do describe "#register" do context "when params are valid" do let(:params) { {:name => "Andy"} } it "saves the user" do subject.register(params) expect(User.count).to eq(1) end it "returns :saved" do expect(subject.register(params)).to eq(:saved) end end end end
CREDITS ▸ Ian Cooper - TDD, where did it all go wrong? vimeo.com/68375232 ▸ Katrina Owen - Therapeutic Refactoring youtu.be/J4dlF0kcThQ ▸ Sandi Metz/Matt Wynne - #POODL Course kickstartacademy.io