我正在尝试在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认识到这是有效的用户,但帐户应该被锁定。有人可以帮助我直截了当吗?下面是整个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
答案 0 :(得分: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