Skip to content

Instantly share code, notes, and snippets.

@Thomascountz
Last active March 22, 2019 18:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Thomascountz/a2619c6cf610f1266895e591cf5117ca to your computer and use it in GitHub Desktop.
Save Thomascountz/a2619c6cf610f1266895e591cf5117ca to your computer and use it in GitHub Desktop.
Which Do You Prefer? Why?

Which do you prefer?

Here is a ruby User class with #first_name, #last_name, and #full_name methods, as well as a constructor.

#/lib/user.rb
class User
  
  attr_reader :first_name, :last_name
  
  def initialize(first_name:, last_name:)
    @first_name = first_name
    @last_name = last_name
  end
  
  def full_name
    "#{first_name} #{last_name}"
  end
end

Option A

#/spec/user_spec.rb
require 'rspec'
require "user"

RSpec.describe User do
  describe "#first_name" do
    it "returns the user's first name" do
      user = User.new(first_name: "Jane", last_name: "Doe")
      expect(user.first_name).to eq "Jane"
    end
  end
  describe "#last_name" do
    it "returns the user's last name" do
      user = User.new(first_name: "Jane", last_name: "Doe")
      expect(user.last_name).to eq "Doe"
    end
  end
  describe "#full_name" do
    it "returns the user's full name" do
      user = User.new(first_name: "Jane", last_name: "Doe")
      expect(user.full_name).to eq "Jane Doe"
    end
  end
end

Option B

#/spec/user_spec.rb
require 'rspec'
require "user"

RSpec.describe User do
  def create_jane_doe_user
    User.new(first_name: "Jane", last_name: "Doe")
  end

  describe "#first_name" do
    it "returns the user's first name" do
      user = create_jane_doe_user
      expect(user.first_name).to eq "Jane"
    end
  end
  describe "#last_name" do
    it "returns the user's last name" do
      user = create_jane_doe_user
      expect(user.last_name).to eq "Doe"
    end
  end
  describe "#full_name" do
    it "returns the user's full name" do
      user = create_jane_doe_user
      expect(user.full_name).to eq "Jane Doe"
    end
  end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment