2010-06-06 21 views
0

Quelqu'un peut-il fournir une stratégie/code échantillons/pointeurs pour tester les validations Captcha + Authlogic en utilisant Shoulda, Factory Girl et Mocha?Tests Rails Controller pour Captcha en utilisant Shoulda, Factory Girl, Mocha

Par exemple, mon UsersController est quelque chose comme:

class UsersController < ApplicationController 
validates_captcha 

... 
def create 
... 
if captcha_validated? 
     # code to deal with user attributes 
end 
... 
end 

Dans ce cas, comment voulez-vous moquez/stub en utilisant Shoulda/Factory Girl/Mocha pour tester les réponses valides et non valides à l'image Captcha?

apprécie votre aide, Siva

Répondre

0

Je pense que cela dépend où captcha_validated? est défini, mais vous voulez railler sa valeur de retour, puis écrire des tests pour chaque cas. Quelque chose comme ceci:

describe UsersController, "POST create" do 
    context "valid captcha" do 
    before do 
     SomeCaptchaObject.expects(:captcha_validated?).returns(true) 
    end 
    # ... 
    end 
    context "invalid captcha" do 
    before do 
     SomeCaptchaObject.expects(:captcha_validated?).returns(false) 
    end 
    # ... 
    end 
end 
+0

Merci rspeicher, le "captcha_validated?" est une partie du plugin Captcha et est défini comme ci-dessous: modules ValidatesCaptcha def self.included (base) base.extend (classmethods) extrémité classmethods Les modules de def validates_captcha helper CaptchaHelper comprennent ValidatesCaptcha :: InstanceMethods fin fin module InstanceMethods def captcha_validated? CaptchaUtil :: encrypt_string (params [: captcha] .to_s.gsub (» », '') .downcase) == params [:] captcha_validation fin fin fin Je vais essayer votre suggestion et de faire rapport. Merci encore - Siva – Siva

0

j'ai pu résoudre avec cette configuration:

class UsersControllerTest < ActionController::TestCase 

    context "create action" do 

    context "valid user with valid captcha" do 

     setup do 
     User.any_instance.stubs(:valid?).returns(true) 
     @controller.stubs(:captcha_validated?).returns(true) 

     post :create, :user => Factory.attributes_for(:user, :captcha => "blahblah") 
     end 

     should_redirect_to("user home") { user_path(@user) } 
    end 

    context "valid user with invalid captcha" do 
     setup do 

     User.any_instance.stubs(:valid?).returns(true) 
     @controller.stubs(:captcha_validated?).returns(false) 

     post :create, :user => Factory.attributes_for(:user, :captcha => "blahblah") 
     end 

     should_render_template :new 

    end 
    end 
end 

Merci.