2

Ruby on Rails システムで、ログイン試行が x 回失敗した後にユーザーをロックアウトするケースをテストしようとしています。私が抱えている問題は、ユーザーを作成しようとして、アカウントを「ロック」する数に達したことです。私はファクトリを使用してユーザーを作成しています-

Factory.define :locked_user, :class => User do |user|
user.name                   "Test Lock"
user.email                  "lock@lock.com"
user.password               "blah1234"
user.password_confirmation  "blah1234"
user.login_count             5
end

5 は「マジック ナンバー」です。次のようなものを使用しようとすると

@user = Factory(:locked_user)

データベースにユーザーを作成しますが、新しく作成されたユーザーは常に login_count がゼロに設定されているため、テストにログインするだけです。.build メソッドを試してみると

@user = Factory.build(:locked_user)

私が望むようにユーザーをlogin_count = 5に設定しますが、ユーザーが有効であると見なされず、ログインしようとしません(つまり、「正しいユーザーではなく、「悪いユーザー/パスワード」エラーが表示されます) /password ですが、ロックアウトされています' エラー)。これは有効なユーザーであるがアカウントをロックする必要があるという事実をRSpecに認識させるために、ここに何かが欠けていると思います。誰かが私をまっすぐにするのを手伝ってくれますか? 以下は、desribe ブロック全体です。

describe "with locked account" do
     before(:each) do
      @user = Factory.build(:locked_user)
      @attr = { :email => @user.email, :password => @user.password}
    end

  it "should not allow signin with locked account" do
    post :create, :session => @attr
    flash.now[:error].should =~ /Invalid user locked out/i
  end  
end
4

1 に答える 1

0

ユーザーの作成後に login_count を設定するか、ユーザー ログインがロックされているかどうかを通知するメソッドをスタブすることをお勧めします。

たとえば、 update_attribute を使用して、ユーザーの作成後に login_count を強制します。

before(:each) do
  @user = Factory(:user)
  @user.update_attribute(:login_count, 5)
  @attr = { :email => @user.email, :password => @user.password}
end

または、スタブを使用して locked_login? または同等の方法をスタブ化します。

before(:each) do
  @user = Factory(:user)
  @user.stub(:locked_login?).and_return(true)
  @attr = { :email => @user.email, :password => @user.password}
end
于 2011-06-01T17:17:12.743 に答える