Step by Step - Intro to TDD using a deck of playing cards
-
Create and edit a file called cards.rb
-
π
require 'minitest/autorun'
require 'minitest/pride'
-
ruby -I"." cards.rb
-
π
describe Deck do
end
-
ruby -I"." cards.rb
-
π
class Deck
end
-
ruby -I"." cards.rb
-
π
describe Deck do
it "has a to_a method" do
Deck.new.respond_to?(:to_a).must_equal true
end
...
-
ruby -I"." cards.rb
-
π
class Deck
def to_a
end
...
-
ruby -I"." cards.rb
-
π
describe Deck do
describe "#to_a" do
it "has 52 items" do
Deck.new.to_a.count.must_equal 52
end
...
-
ruby -I"." cards.rb
-
π
class Deck
def to_a
52.times.map { 0 }
end
...
-
ruby -I"." cards.rb
-
π
describe Deck do
describe "#to_a" do
it "contains Cards" do
Deck.new.to_a[0].class.must_equal Card
end
...
-
ruby -I"." cards.rb
-
π
class Card
end
- π
class Deck
def to_a
52.times.map { Card.new }
end
...
-
ruby -I"." cards.rb
-
π
describe Card do
it "has a rank" do
Card.new.respond_to?(:rank).must_equal true
end
...
-
ruby -I"." cards.rb
-
π
class Card < Struct.new(:rank)
end
-
ruby -I"." cards.rb
-
π
describe Card do
it "has a suit" do
Card.new.respond_to?(:suit).must_equal true
end
...
-
ruby -I"." cards.rb
-
π
class Card < Struct.new(:rank, :suit)
end
-
ruby -I"." cards.rb
-
π
describe Deck do
it "has 13 ranks" do
Deck::RANKS.count.must_equal 13
end
...
-
ruby -I"." cards.rb
-
π
class Deck
RANKS = %i[ace two three four five sex seven eight nine ten jack queen king]
...
-
ruby -I"." cards.rb
-
π
describe Deck do
it "has 4 suits" do
Deck::SUITS.count.must_equal 4
end
...
-
ruby -I"." cards.rb
-
π
class Deck
SUITS = %i[clubs diamonds spades hearts]
...
-
ruby -I"." cards.rb
-
π
describe Deck do
it "must have at least 4 queens" do
Deck.new.to_a.select {|card| card.rank == :queen }.count.must_be :>= 4
end
...
-
ruby -I"." cards.rb
-
π
class Deck
...
def to_a
RANKS.map {|rank| Card.new(rank) }
end
...
-
ruby -I"." cards.rb
-
π
class Deck
...
def to_a
RANKS.map {|rank| SUITS.map {|suit| Card.new(rank) } }
end
...
-
ruby -I"." cards.rb
-
π
class Deck
def to_a
RANKS.flat_map {|rank| SUITS.map {|suit| Card.new(rank) } }
end
...
-
ruby -I"." cards.rb
-
π
describe Card do
it "#to_s is the rank and suit in enligsh" do
Card.new(:ace, :hearts).to_s.must_equal "ace of hearts"
end
...
-
ruby -I"." cards.rb
-
π
class Card
def to_s
"#{rank} of #{suit}"
end
...
-
ruby -I"." cards.rb
-
π
describe Deck do
it "initializes with a shoe size" do
Deck.new(2).shoe_size.must_equal 2
end
-
ruby -I"." cards.rb
-
π
class Deck
...
def initialize(shoe_size=1)
@shoe_size = shoe_size
end
attr_reader :shoe_size
...
~~~
52) ruby -I"." cards.rb
53) :point_down:
~~~ruby
describe Deck do
describe "#to_a" do
it "has 104 items with a shoe_size of 2" do
Deck.new(2).to_a.count.must_equal 52
end
...
-
ruby -I"." cards.rb
-
DONE!