我正在学习 Ruby on Rails 教程,并且达到了清单 6.29。它描述了(看似标准的)用户身份验证过程的测试。
我的问题是理解 user_spec.rb 文件的以下(已编辑)部分:
describe User do
before do
@user = User.new(name: "Example User", email: "user@example.com",
password: "foobar", password_confirmation: "foobar")
end
subject { @user }
describe "return value of authenticate method" do
before { @user.save }
let(:found_user) { User.find_by_email(@user.email) }
describe "with valid password" do
it { should == found_user.authenticate(@user.password) }
end
describe "with invalid password" do
let(:user_for_invalid_password) { found_user.authenticate("invalid") }
it { should_not == user_for_invalid_password }
specify { user_for_invalid_password.should be_false }
end
end
end
我的主要困惑是这条线:
before { @user.save }
这真的将测试用户保存在数据库中吗?在测试密码的正确性之前保存这个测试用户会不会使测试变得多余? 在我看来,我只是在保存用户(使用其密码),然后检查它是否仍然具有相同的密码(我刚刚保存了它!)有人能够澄清我为什么错了吗?