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