Mar*_*man 4 captcha ruby-on-rails functional-testing recaptcha
我的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
Run Code Online (Sandbox Code Playgroud)
这是我的功能测试
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
Run Code Online (Sandbox Code Playgroud)
该测试失败如下
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>.
Run Code Online (Sandbox Code Playgroud)
尝试使用flexmock或mocha使verify_recaptcha的所有实例都返回true:
我的应用程序中的这一行使我的应用程序创建测试通过没有问题:
flexmock(User).new_instances.should_receive(:verify_recaptcha).and_return(true)
Run Code Online (Sandbox Code Playgroud)
如果在"创建"操作发生之前添加此行,它应该可以工作.
此外,我还没有试过这个recaptcha插件,但这也可能对你有所帮助:http: //www.fromdelhi.com/2006/07/21/rails-captcha-and-testing-using-mock-对象/