0

我正在阅读 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 是否都测试数据库不应该验证用户?这些测试有何不同?

4

1 回答 1

0

规格 1 和 2 是相反的。

在第一个中,您将有效密码传递给 authenticate 方法,在这种情况下,该方法返回用户对象本身,然后使用“应该”将其与主题用户对象进行比较

在第二个中,您传递了一个无效的密码来进行身份验证,然后它只返回 false,它“不应该”等于主题用户对象。

希望有帮助。

于 2013-05-28T04:40:28.390 回答