Rails 3 / Capybara没有保存模型属性

时间:2011-07-05 17:17:26

标签: ruby-on-rails capybara

我正在尝试在我的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

1 个答案:

答案 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

测试中引用的用户对象只是应用程序操作对象的副本,因此不会自动刷新。您需要再次从数据库中获取它以获取更新的值。