Контроллеры Rails тестируют капчу с использованием musta, Factory Girl, Mocha - PullRequest
0 голосов
/ 06 июня 2010

Может ли кто-нибудь предоставить стратегию / примеры кода / указатели для проверки валидации Captcha + Authlogic с использованием musta, Factory Girl и Mocha?

Например, мой UsersController выглядит примерно так:

class UsersController < ApplicationController
validates_captcha

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

В этом случае, как вы смоделируете / заглушку с помощью «Должно / Заводская девушка / Мокка», чтобы проверить действительные и недействительные ответы на изображение Captcha?

Ценю вашу помощь, Сива

Ответы [ 2 ]

0 голосов
/ 08 июня 2010

Я смог решить с этой настройкой:

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

Спасибо.

0 голосов
/ 07 июня 2010

Я думаю, это зависит от того, где определено captcha_validated?, но вы хотите смоделировать его возвращаемое значение, а затем написать тесты для каждого случая. Как то так:

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