stevo
10/5/2017 - 9:05 AM

Being explicit about data

Being explicit about data

# Before - use of described_class; 
# exact values are visible only in setup and not in assertions; 
# initial value is not known; 
# values used are not realistic; 
# irrelevant values are defined
describe UserForm do
  describe "#save" do
    it "persists changes" do
      user = create(:user, age: 999)
      attributes = { first_name: "abc123" }

      form = described_class.new(user, attributes)

      expect { form.save }.to change { user.reload.first_name }.to(attributes[:first_name])
    end
  end
end

# After - correlation between values is clearly visible; 
# values are realistic 
describe UserForm do
  describe "#save" do
    it "persists changes" do
      user = create(:user, first_name: "John")
      attributes = { first_name: "Tony" }

      form = UserForm.new(user, attributes)

      expect { form.save }.to change { user.reload.first_name }.from("John").to("Tony")
    end
  end
end