2010-02-26 15 views
4

Mon contrôle UsersControllerTest échoue actuellement car j'utilise verify_recaptcha dans UsersController # create. Comment puis-je écrire mes tests de manière à ce qu'une bonne réponse CAPTCHA soit passée avec params [: user]? J'utilise reCAPTCHA, mais je suppose que la question s'appliquerait à n'importe quelle implémentation de CAPTCHA.Test fonctionnel Rails en utilisant Recaptcha

Voici mon UtilisateursController # créer

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 

et voici mon test fonctionnel

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 => '[email protected]' } 
    end 
end 

Ce test échoue comme suit

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>. 

Répondre

5

Essayez d'utiliser flexmock ou mocha avoir tous les instances de verify_recaptcha renvoient true:

Cette ligne dans mon application a fait le test sans créer passe un problème sur mon application:

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

Si vous ajoutez cette ligne avant que l'action « créer » a lieu, il devrait fonctionner.

En outre, je n'ai pas essayé ce plugin recaptcha, mais cela pourrait aussi être utile pour vous: http://www.fromdelhi.com/2006/07/21/rails-captcha-and-testing-using-mock-objects/