ruby on rails-Rspec工厂问题-概念问题



我试图在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的用户,就像我想要的那样,但它不认为该用户有效,也不会尝试让他们登录(即,它给我们的错误是"坏用户/密码",而不是"正确用户/密码,但你被锁定了")。我想我错过了一些东西,让RSpec了解这是一个有效的用户,但帐户应该被锁定。有人能帮我澄清一下吗?以下是整个描述块-

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

我建议您在创建用户后设置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

相关内容

  • 没有找到相关文章

最新更新