我正在尝试在我的Rails 3应用程序上运行Capybara 1.0测试,以测试当用户点击确认链接时,他是否确实已经确认。
现在,当我手动测试时,这实际上有效。另外,正如你所看到的那样,我在confirm方法中调用了一个puts @ user.confirmed行来调试它,当我运行测试时它实际上会输出true。但是,测试本身就失败了。
在执行控制器方法后,好像我的用户模型中的确认属性没有被测试记住。
我错过了什么?非常感谢提前。
测试:
it "should allow a user to be confirmed after clicking confirmation link" do
fill_in('user_email', :with => 'test@test.com')
click_button('Submit')
@user = User.find_by_email('test@test.com')
@user.confirmed.should be_false
visit confirm_path(@user.confirmation_code)
@user.confirmed.should be_true
end
控制器方法:
def confirm
@confirmation_code = params[:confirmation_code]
@user = User.find_by_confirmation_code(@confirmation_code)
@website = @user.website
@user.confirm
if @user.referrer_id
User.find(@user.referrer_id).increment_signups
end
flash[:success] = "Thanks for signing up!"
flash[:user_show] = @user.id
puts @user.confirmed
redirect_to "http://" + @website.domain_name
end
用户模型方法:
def confirm
self.confirmed = true
self.save
end
答案 0 :(得分:4)
访问confirm_path后是否需要重新加载用户对象?试试这个:
it "should allow a user to be confirmed after clicking confirmation link" do
fill_in('user_email', :with => 'test@test.com')
click_button('Submit')
@user = User.find_by_email('test@test.com')
@user.confirmed.should be_false
visit confirm_path(@user.confirmation_code)
@user = User.find_by_email('test@test.com')
@user.confirmed.should be_true
end
或者您可以使用@user.reload
。
测试中引用的用户对象只是应用程序操作对象的副本,因此不会自动刷新。您需要再次从数据库中获取它以获取更新的值。