0

私はMichael Hartlの本を読んでいます。私はセクション6.3.3にいます。私たちが達成しようとしていることを理解しています。ただし、私には、これらの仕様のうち 2 つが同じことをテストしているように見えます。

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 がユーザーを検証してはならないことをテストしていませんか? これらのテストはどのように違うのですか?

4

1 に答える 1

0

仕様 1 と仕様 2 は互いに逆です。

最初のものでは、有効なパスワードを認証メソッドに渡しています。この場合、ユーザー オブジェクト自体が返され、「should」を使用して対象のユーザー オブジェクトと比較されます。

2 番目の例では、認証に無効なパスワードを渡しているため、false が返されます。これは、対象のユーザー オブジェクトと同じである必要はありません。

それが役立つことを願っています。

于 2013-05-28T04:40:28.390 に答える