Burgers and RSpec
How responsive test design
can lead to deliciousness
# app/models/burger.rb# app/models/burger.rb
class Burger < ActiveRecord::Base
end# app/models/burger.rb
class Burger < ActiveRecord::Base
has_and_belongs_to_many :condiments
end# app/models/burger.rb
class Burger < ActiveRecord::Base
has_and_belongs_to_many :condiments
end
# app/models/condiment.rb# app/models/burger.rb
class Burger < ActiveRecord::Base
has_and_belongs_to_many :condiments
end
# app/models/condiment.rb
class Condiment < ActiveRecord::Base
end# app/models/burger.rb
class Burger < ActiveRecord::Base
has_and_belongs_to_many :condiments
end
# app/models/condiment.rb
class Condiment < ActiveRecord::Base
has_and_belongs_to_many :burgers
end# app/models/burger.rb
class Burger < ActiveRecord::Base
has_and_belongs_to_many :condiments
end
# app/models/condiment.rb
class Condiment < ActiveRecord::Base
has_and_belongs_to_many :burgers
PICKLE =
end# app/models/burger.rb
class Burger < ActiveRecord::Base
has_and_belongs_to_many :condiments
end
# app/models/condiment.rb
class Condiment < ActiveRecord::Base
has_and_belongs_to_many :burgers
PICKLE = find_or_create_by
end# app/models/burger.rb
class Burger < ActiveRecord::Base
has_and_belongs_to_many :condiments
end
# app/models/condiment.rb
class Condiment < ActiveRecord::Base
has_and_belongs_to_many :burgers
PICKLE = find_or_create_by name:
end# app/models/burger.rb
class Burger < ActiveRecord::Base
has_and_belongs_to_many :condiments
end
# app/models/condiment.rb
class Condiment < ActiveRecord::Base
has_and_belongs_to_many :burgers
PICKLE = find_or_create_by name: 'pickle'
end# app/models/burger.rb
class Burger < ActiveRecord::Base
has_and_belongs_to_many :condiments
def delicious?
end
end
# app/models/condiment.rb
class Condiment < ActiveRecord::Base
has_and_belongs_to_many :burgers
PICKLE = find_or_create_by name: 'pickle'
end# app/models/burger.rb
class Burger < ActiveRecord::Base
has_and_belongs_to_many :condiments
def delicious?
condiments.include?
end
end
# app/models/condiment.rb
class Condiment < ActiveRecord::Base
has_and_belongs_to_many :burgers
PICKLE = find_or_create_by name: 'pickle'
end# app/models/burger.rb
class Burger < ActiveRecord::Base
has_and_belongs_to_many :condiments
def delicious?
condiments.include? Condiment::PICKLE
end
end
# app/models/condiment.rb
class Condiment < ActiveRecord::Base
has_and_belongs_to_many :burgers
PICKLE = find_or_create_by name: 'pickle'
end# app/models/burger.rb
class Burger < ActiveRecord::Base
has_and_belongs_to_many :condiments
def delicious?
condiments.include? Condiment::PICKLE
end
end
# app/models/condiment.rb
class Condiment < ActiveRecord::Base
has_and_belongs_to_many :burgers
PICKLE = find_or_create_by name: 'pickle'
LETTUCE = find_or_create_by name: 'lettuce'
end# app/models/burger.rb
class Burger < ActiveRecord::Base
has_and_belongs_to_many :condiments
def delicious?
condiments.include? Condiment::PICKLE
end
def gross?
end
end
# app/models/condiment.rb
class Condiment < ActiveRecord::Base
has_and_belongs_to_many :burgers
PICKLE = find_or_create_by name: 'pickle'
LETTUCE = find_or_create_by name: 'lettuce'
end# app/models/burger.rb
class Burger < ActiveRecord::Base
has_and_belongs_to_many :condiments
def delicious?
condiments.include? Condiment::PICKLE
end
def gross?
condiments.include?
end
end
# app/models/condiment.rb
class Condiment < ActiveRecord::Base
has_and_belongs_to_many :burgers
PICKLE = find_or_create_by name: 'pickle'
LETTUCE = find_or_create_by name: 'lettuce'
end# app/models/burger.rb
class Burger < ActiveRecord::Base
has_and_belongs_to_many :condiments
def delicious?
condiments.include? Condiment::PICKLE
end
def gross?
condiments.include? Condiment::LETTUCE
end
end
# app/models/condiment.rb
class Condiment < ActiveRecord::Base
has_and_belongs_to_many :burgers
PICKLE = find_or_create_by name: 'pickle'
LETTUCE = find_or_create_by name: 'lettuce'
end# app/models/burger.rb
class Burger < ActiveRecord::Base
has_and_belongs_to_many :condiments
def delicious?
condiments.include? Condiment::PICKLE
end
def gross?
condiments.include? Condiment::LETTUCE
end
def plain?
end
end
# app/models/condiment.rb
class Condiment < ActiveRecord::Base
has_and_belongs_to_many :burgers
PICKLE = find_or_create_by name: 'pickle'
LETTUCE = find_or_create_by name: 'lettuce'
end# app/models/burger.rb
class Burger < ActiveRecord::Base
has_and_belongs_to_many :condiments
def delicious?
condiments.include? Condiment::PICKLE
end
def gross?
condiments.include? Condiment::LETTUCE
end
def plain?
condiments.empty?
end
end
# app/models/condiment.rb
class Condiment < ActiveRecord::Base
has_and_belongs_to_many :burgers
PICKLE = find_or_create_by name: 'pickle'
LETTUCE = find_or_create_by name: 'lettuce'
end# spec/models/burger_spec.rb# spec/models/burger_spec.rb
describe Burger do
end# spec/models/burger_spec.rb
describe Burger do
describe 'delicious?' do
end
end# spec/models/burger_spec.rb
describe Burger do
describe 'delicious?' do
it 'passes for burgers with pickles'
end
end# spec/models/burger_spec.rb
describe Burger do
describe 'delicious?' do
it 'passes for burgers with pickles'
it 'fails for burgers without pickles'
end
end# spec/models/burger_spec.rb
describe Burger do
describe 'delicious?' do
before :each do
end
it 'passes for burgers with pickles'
it 'fails for burgers without pickles'
end
end# spec/models/burger_spec.rb
describe Burger do
describe 'delicious?' do
before :each do
@tasty_burger =
end
it 'passes for burgers with pickles'
it 'fails for burgers without pickles'
end
end# spec/models/burger_spec.rb
describe Burger do
describe 'delicious?' do
before :each do
@tasty_burger = create :burger
end
it 'passes for burgers with pickles'
it 'fails for burgers without pickles'
end
end# spec/models/burger_spec.rb
describe Burger do
describe 'delicious?' do
before :each do
@tasty_burger = create :burger,
condiments: [Condiment::PICKLE]
end
it 'passes for burgers with pickles'
it 'fails for burgers without pickles'
end
end# spec/models/burger_spec.rb
describe Burger do
describe 'delicious?' do
before :each do
@tasty_burger = create :burger,
condiments: [Condiment::PICKLE]
@yucky_burger =
end
it 'passes for burgers with pickles'
it 'fails for burgers without pickles'
end
end# spec/models/burger_spec.rb
describe Burger do
describe 'delicious?' do
before :each do
@tasty_burger = create :burger,
condiments: [Condiment::PICKLE]
@yucky_burger = create :burger
end
it 'passes for burgers with pickles'
it 'fails for burgers without pickles'
end
end# spec/models/burger_spec.rb
describe Burger do
describe 'delicious?' do
before :each do
@tasty_burger = create :burger,
condiments: [Condiment::PICKLE]
@yucky_burger = create :burger,
condiments: [Condiment::LETTUCE]
end
it 'passes for burgers with pickles' do
end
it 'fails for burgers without pickles'
end
end# spec/models/burger_spec.rb
describe Burger do
describe 'delicious?' do
before :each do
@tasty_burger = create :burger,
condiments: [Condiment::PICKLE]
@yucky_burger = create :burger,
condiments: [Condiment::LETTUCE]
end
it 'passes for burgers with pickles' do
expect
end
it 'fails for burgers without pickles'
end
end# spec/models/burger_spec.rb
describe Burger do
describe 'delicious?' do
before :each do
@tasty_burger = create :burger,
condiments: [Condiment::PICKLE]
@yucky_burger = create :burger,
condiments: [Condiment::LETTUCE]
end
it 'passes for burgers with pickles' do
expect(@tasty_burger.is_delicious?)
end
it 'fails for burgers without pickles'
end
end# spec/models/burger_spec.rb
describe Burger do
describe 'delicious?' do
before :each do
@tasty_burger = create :burger,
condiments: [Condiment::PICKLE]
@yucky_burger = create :burger,
condiments: [Condiment::LETTUCE]
end
it 'passes for burgers with pickles' do
expect(@tasty_burger.is_delicious?).to eql true
end
it 'fails for burgers without pickles'
end
end# spec/models/burger_spec.rb
describe Burger do
describe 'delicious?' do
before :each do
@tasty_burger = create :burger,
condiments: [Condiment::PICKLE]
@yucky_burger = create :burger,
condiments: [Condiment::LETTUCE]
end
it 'passes for burgers with pickles' do
expect(@tasty_burger.is_delicious?).to eql true
end
it 'fails for burgers without pickles' do
end
end
end# spec/models/burger_spec.rb
describe Burger do
describe 'delicious?' do
before :each do
@tasty_burger = create :burger,
condiments: [Condiment::PICKLE]
@yucky_burger = create :burger,
condiments: [Condiment::LETTUCE]
end
it 'passes for burgers with pickles' do
expect(@tasty_burger.is_delicious?).to eql true
end
it 'fails for burgers without pickles' do
expect(@yucky_burger.is_delicious?)
end
end
end# spec/models/burger_spec.rb
describe Burger do
describe 'delicious?' do
before :each do
@tasty_burger = create :burger,
condiments: [Condiment::PICKLE]
@yucky_burger = create :burger,
condiments: [Condiment::LETTUCE]
end
it 'passes for burgers with pickles' do
expect(@tasty_burger.is_delicious?).to eql true
end
it 'fails for burgers without pickles' do
expect(@yucky_burger.is_delicious?).to eql false
end
end
end


# spec/models/burger_spec.rb
describe Burger do
describe 'delicious?' do
before :each do
@tasty_burger = create :burger,
condiments: [Condiment::PICKLE]
@yucky_burger = create :burger,
condiments: [Condiment::LETTUCE]
end
it 'passes for burgers with pickles' do
expect(@tasty_burger.is_delicious?).to eql true
end
it 'fails for burgers without pickles' do
expect(@yucky_burger.is_delicious?).to eql false
end
end
end# spec/models/burger_spec.rb
describe Burger do
describe 'delicious?' do
before :each do
@tasty_burger = create :burger,
condiments: [Condiment::PICKLE]
@yucky_burger = create :burger,
condiments: [Condiment::LETTUCE]
end
it 'passes for burgers with pickles' do
expect(@tasty_burger.is_delicious?).to eql true
end
it 'fails for burgers without pickles' do
expect(@yucky_burger.is_delicious?).to eql false
end
end
describe 'gross?' do
before :each do
@tasty_burger = create :burger,
condiments: [Condiment::PICKLE]
@yucky_burger = create :burger,
condiments: [Condiment::LETTUCE]
end
it 'passes for burgers with lettuce' do
expect(@yucky_burger.is_gross?).to eql true
end
it 'fails for burgers without lettuce' do
expect(@tasty_burger.is_gross?).to eql false
end
end
end# spec/models/burger_spec.rb
describe Burger do
describe 'delicious?' do
before :each do
@tasty_burger = create :burger,
condiments: [Condiment::PICKLE]
@yucky_burger = create :burger,
condiments: [Condiment::LETTUCE]
end
it 'passes for burgers with pickles' do
expect(@tasty_burger.is_delicious?).to eql true
end
it 'fails for burgers without pickles' do
expect(@yucky_burger.is_delicious?).to eql false
end
end
describe 'gross?' do
before :each do
@tasty_burger = create :burger,
condiments: [Condiment::PICKLE]
@yucky_burger = create :burger,
condiments: [Condiment::LETTUCE]
end
it 'passes for burgers with lettuce' do
expect(@yucky_burger.is_gross?).to eql true
end
it 'fails for burgers without lettuce' do
expect(@tasty_burger.is_gross?).to eql false
end
end
describe 'plain?' do
before :each do
@plain_burger = create :burger,
condiments: []
@loaded_burger = create :burger,
condiments: [Condiment::PICKLE,
Condiment::LETTUCE]
end
it 'passes for burgers with no condiments' do
expect(@plain_burger.is_plain?).to eql true
end
it 'fails for burgers with condiments' do
expect(@loaded_burger.is_plain?).to eql false
end
end
end


# spec/factories/burgers.rb
FactoryGirl.define do
factory :burger
end# spec/factories/burgers.rb
FactoryGirl.define do
factory :burger
trait
end# spec/factories/burgers.rb
FactoryGirl.define do
factory :burger
trait :with_pickles do
condiments
end
end# spec/factories/burgers.rb
FactoryGirl.define do
factory :burger
trait :with_pickles do
condiments [Condiment::PICKLE]
end
end# spec/factories/burgers.rb
FactoryGirl.define do
factory :burger
trait :with_pickles do
condiments [Condiment::PICKLE]
end
trait :with_lettuce do
condiments
end
end# spec/factories/burgers.rb
FactoryGirl.define do
factory :burger
trait :with_pickles do
condiments [Condiment::PICKLE]
end
trait :with_lettuce do
condiments [Condiment::LETTUCE]
end
end# spec/factories/burgers.rb
FactoryGirl.define do
factory :burger
trait :with_pickles do
condiments [Condiment::PICKLE]
end
trait :with_lettuce do
condiments [Condiment::LETTUCE]
end
trait :with_nothing do
condiments
end
end# spec/factories/burgers.rb
FactoryGirl.define do
factory :burger
trait :with_pickles do
condiments [Condiment::PICKLE]
end
trait :with_lettuce do
condiments [Condiment::LETTUCE]
end
trait :with_nothing do
condiments []
end
end# spec/models/burger_spec.rb
describe Burger do
end
# spec/models/burger_spec.rb
describe Burger do
describe 'with pickles' do
end
end
# spec/models/burger_spec.rb
describe Burger do
describe 'with pickles' do
end
describe 'with lettuce' do
end
end
# spec/models/burger_spec.rb
describe Burger do
describe 'with pickles' do
end
describe 'with lettuce' do
end
describe 'with no condiments' do
end
end
# spec/models/burger_spec.rb
describe Burger do
describe 'with pickles' do
subject { }
end
describe 'with lettuce' do
end
describe 'with no condiments' do
end
end
# spec/models/burger_spec.rb
describe Burger do
describe 'with pickles' do
subject { create :burger }
end
describe 'with lettuce' do
end
describe 'with no condiments' do
end
end
# spec/models/burger_spec.rb
describe Burger do
describe 'with pickles' do
subject { create :burger, :with_pickles }
end
describe 'with lettuce' do
end
describe 'with no condiments' do
end
end
# spec/models/burger_spec.rb
describe Burger do
describe 'with pickles' do
subject { create :burger, :with_pickles }
it { }
end
describe 'with lettuce' do
end
describe 'with no condiments' do
end
end
# spec/models/burger_spec.rb
describe Burger do
describe 'with pickles' do
subject { create :burger, :with_pickles }
it { is_expected }
end
describe 'with lettuce' do
end
describe 'with no condiments' do
end
end
# spec/models/burger_spec.rb
describe Burger do
describe 'with pickles' do
subject { create :burger, :with_pickles }
it { is_expected.to be_delicious }
end
describe 'with lettuce' do
end
describe 'with no condiments' do
end
end
# spec/models/burger_spec.rb
describe Burger do
describe 'with pickles' do
subject { create :burger, :with_pickles }
it { is_expected.to be_delicious }
it { is_expected.not_to be_gross }
end
describe 'with lettuce' do
end
describe 'with no condiments' do
end
end
# spec/models/burger_spec.rb
describe Burger do
describe 'with pickles' do
subject { create :burger, :with_pickles }
it { is_expected.to be_delicious }
it { is_expected.not_to be_gross }
it { is_expected.not_to be_plain }
end
describe 'with lettuce' do
end
describe 'with no condiments' do
end
end
# spec/models/burger_spec.rb
describe Burger do
describe 'with pickles' do
subject { create :burger, :with_pickles }
it { is_expected.to be_delicious }
it { is_expected.not_to be_gross }
it { is_expected.not_to be_plain }
end
describe 'with lettuce' do
subject { create :burger, :with_lettuce }
it { is_expected.not_to be_delicious }
it { is_expected.to be_gross }
it { is_expected.not_to be_plain }
end
describe 'with no condiments' do
end
end
# spec/models/burger_spec.rb
describe Burger do
describe 'with pickles' do
subject { create :burger, :with_pickles }
it { is_expected.to be_delicious }
it { is_expected.not_to be_gross }
it { is_expected.not_to be_plain }
end
describe 'with lettuce' do
subject { create :burger, :with_lettuce }
it { is_expected.not_to be_delicious }
it { is_expected.to be_gross }
it { is_expected.not_to be_plain }
end
describe 'with no condiments' do
subject { create :burger, :with_nothing }
it { is_expected.not_to be_delicious }
it { is_expected.not_to be_gross }
it { is_expected.to be_plain }
end
end



# app/models/burger.rb
class Burger < ActiveRecord::Base
has_and_belongs_to_many :condiments
def delicious?
condiments.include? Condiment::PICKLE
end
#...
end
# app/models/condiment.rb
class Condiment < ActiveRecord::Base
has_and_belongs_to_many :burgers
PICKLE = find_or_create_by name: 'pickle'
LETTUCE = find_or_create_by name: 'lettuce'
end# app/models/burger.rb
class Burger < ActiveRecord::Base
has_and_belongs_to_many :condiments
def delicious?
condiments.include? Condiment::PICKLE
end
#...
def self.delicious
end
end
# app/models/condiment.rb
class Condiment < ActiveRecord::Base
has_and_belongs_to_many :burgers
PICKLE = find_or_create_by name: 'pickle'
LETTUCE = find_or_create_by name: 'lettuce'
end# app/models/burger.rb
class Burger < ActiveRecord::Base
has_and_belongs_to_many :condiments
def delicious?
condiments.include? Condiment::PICKLE
end
#...
def self.delicious
Condiment::PICKLE
end
end
# app/models/condiment.rb
class Condiment < ActiveRecord::Base
has_and_belongs_to_many :burgers
PICKLE = find_or_create_by name: 'pickle'
LETTUCE = find_or_create_by name: 'lettuce'
end# app/models/burger.rb
class Burger < ActiveRecord::Base
has_and_belongs_to_many :condiments
def delicious?
condiments.include? Condiment::PICKLE
end
#...
def self.delicious
Condiment::PICKLE.burgers
end
end
# app/models/condiment.rb
class Condiment < ActiveRecord::Base
has_and_belongs_to_many :burgers
PICKLE = find_or_create_by name: 'pickle'
LETTUCE = find_or_create_by name: 'lettuce'
end# spec/models/burger_spec.rb
describe Burger do
describe 'with pickles' do
subject { create :burger, :with_pickles }
it { is_expected.to be_delicious }
it { is_expected.not_to be_gross }
it { is_expected.not_to be_plain }
end
# ...
end
# spec/models/burger_spec.rb
describe Burger do
describe 'with pickles' do
subject { create :burger, :with_pickles }
it { is_expected.to be_delicious }
it { is_expected.not_to be_gross }
it { is_expected.not_to be_plain }
end
# ...
describe Burger.delicious do
end
end
# spec/models/burger_spec.rb
describe Burger do
describe 'with pickles' do
subject { create :burger, :with_pickles }
it { is_expected.to be_delicious }
it { is_expected.not_to be_gross }
it { is_expected.not_to be_plain }
end
# ...
describe Burger.delicious do
it { }
end
end
# spec/models/burger_spec.rb
describe Burger do
describe 'with pickles' do
subject { create :burger, :with_pickles }
it { is_expected.to be_delicious }
it { is_expected.not_to be_gross }
it { is_expected.not_to be_plain }
end
# ...
describe Burger.delicious do
it { is_expected.to include }
end
end
# spec/models/burger_spec.rb
describe Burger do
describe 'with pickles' do
subject { create :burger, :with_pickles }
it { is_expected.to be_delicious }
it { is_expected.not_to be_gross }
it { is_expected.not_to be_plain }
end
# ...
describe Burger.delicious do
it { is_expected.to include (create :burger, :with_pickles) }
end
end
# spec/models/burger_spec.rb
describe Burger do
let
describe 'with pickles' do
subject { create :burger, :with_pickles }
it { is_expected.to be_delicious }
it { is_expected.not_to be_gross }
it { is_expected.not_to be_plain }
end
# ...
describe Burger.delicious do
it { is_expected.to include (create :burger, :with_pickles) }
end
end
# spec/models/burger_spec.rb
describe Burger do
let(:burger_with_pickles)
describe 'with pickles' do
subject { create :burger, :with_pickles }
it { is_expected.to be_delicious }
it { is_expected.not_to be_gross }
it { is_expected.not_to be_plain }
end
# ...
describe Burger.delicious do
it { is_expected.to include (create :burger, :with_pickles) }
end
end
# spec/models/burger_spec.rb
describe Burger do
let(:burger_with_pickles){ create :burger, :with_pickles }
describe 'with pickles' do
subject { create :burger, :with_pickles }
it { is_expected.to be_delicious }
it { is_expected.not_to be_gross }
it { is_expected.not_to be_plain }
end
# ...
describe Burger.delicious do
it { is_expected.to include (create :burger, :with_pickles) }
end
end
# spec/models/burger_spec.rb
describe Burger do
let(:burger_with_pickles){ create :burger, :with_pickles }
describe 'with pickles' do
subject { burger_with_pickles }
it { is_expected.to be_delicious }
it { is_expected.not_to be_gross }
it { is_expected.not_to be_plain }
end
# ...
describe Burger.delicious do
it { is_expected.to include (create :burger, :with_pickles) }
end
end
# spec/models/burger_spec.rb
describe Burger do
let(:burger_with_pickles){ create :burger, :with_pickles }
describe 'with pickles' do
subject { burger_with_pickles }
it { is_expected.to be_delicious }
it { is_expected.not_to be_gross }
it { is_expected.not_to be_plain }
end
# ...
describe Burger.delicious do
it { is_expected.to include burger_with_pickles }
end
end


Burgers and RSpec
By David Faulkenberry
Burgers and RSpec
UMass Transit IT code review, December 16th, 2015
- 797