【问题标题】:Rails Functional Test using Recaptcha使用 Recaptcha 进行 Rails 功能测试
【发布时间】:2010-02-26 16:54:30
【问题描述】:

我的 UsersControllerTest 当前失败,因为我在 UsersController#create 中使用了 verify_recaptcha。如何编写测试,以便使用 params[:user] 传递已知良好的 CAPTCHA 响应?我正在使用 reCAPTCHA,但我想这个问题适用于任何 CAPTCHA 实现。

这是我的 UsersController#create

def create
  @user = User.new(params[:user])    
  if verify_recaptcha(@user) && @user.save
    flash[:notice] = "Account registered!"
    redirect_to new_order_url
  else
    flash.now[:error] = "Account not registered!"
    render :action => :new
  end
end

这是我的功能测试

test "should create user" do
    assert_difference('User.count') do
      post :create, :user => { :login => "jdoe",
                               :password => "secret", 
                               :password_confirmation => "secret",
                               :first_name => 'john',
                               :last_name => 'doe',
                               :address1 => '123 Main St.',
                               :city => 'Anytown',
                               :state => 'XY',
                               :zip => '99999',
                               :country => 'United States',
                               :email => 'jdoe@example.com' }
    end
end

此测试失败如下

  4) Failure:
test_should_create_user(UsersControllerTest)
    [(eval):3:in `each_with_index'
     /test/functional/users_controller_test.rb:15:in `test_should_create_user']:
"User.count" didn't change by 1.
<3> expected but was
<2>.

【问题讨论】:

    标签: ruby-on-rails captcha recaptcha functional-testing


    【解决方案1】:

    尝试使用 flexmock 或 mocha 让 verify_recaptcha 的所有实例返回 true:

    我的应用程序中的这一行使我的应用程序没有问题地通过了创建测试:

    flexmock(User).new_instances.should_receive(:verify_recaptcha).and_return(true)
    

    如果您在“创建”操作发生之前添加此行,它应该可以工作。

    另外,我还没有尝试过这个 recaptcha 插件,但这也可能对你有帮助: http://www.fromdelhi.com/2006/07/21/rails-captcha-and-testing-using-mock-objects/

    【讨论】:

      最近更新 更多