我正在阅读Michael Hartl的书。我在第6.3.3节。我理解我们要完成的任务。但是,对我来说,其中两个规格似乎正在测试同样的事情:
来自user_spec.rb:http://ruby.railstutorial.org/chapters/modeling-users#code-authenticate_spec
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 } #1
specify { user_for_invalid_password.should be_false } #2
end
end
规格1和2是否都不测试DB如果密码不正确则不应验证用户?这些测试有何不同?
答案 0 :(得分:0)
规格1和2彼此相反。
在第一个中,您将有效密码传递给authenticate方法,在这种情况下返回用户对象本身,然后使用'should'将其与主题用户对象进行比较
在第二种情况下,您传递的是无效密码以进行身份验证,然后只返回false,其中“should_not”等于主题用户对象。
希望有所帮助。