Как протестировать фильтры контроллеров в Ruby on Rails и Test :: Unit - PullRequest
1 голос
/ 30 октября 2008

У нас есть большое приложение на Ruby on Rails со множеством фильтров. Некоторые из этих фильтров могут быть сложными. Я ищу способ индивидуально проверить эти фильтры с помощью модульного теста. Прямо сейчас я проверяю их, проверяя их с помощью действия, которое использует их с функциональным тестом. Это просто не похоже на правильный путь.
У кого-нибудь есть совет или опыт с этим?

Ответы [ 6 ]

3 голосов
/ 30 октября 2008

Помните, что фильтр - это всего лишь метод.
Учитывая это:

class SomeController
  before_filter :ensure_awesomeness

  ...
end

Нет причины, по которой вы не можете просто сделать это:

SomeController.new.ensure_awesomeness

и затем проверьте, что он вызывает redirect_to или что он должен делать

1 голос
/ 15 октября 2014

Вы можете тестировать с этим кодом:

require "test_helper"
describe ApplicationController do

  context 'ensure_manually_set_password' do
    setup do
      class ::TestingController < ApplicationController
        def hello
          render :nothing => true
        end
      end

      NameYourApp::Application.routes.draw do 
        get 'hello', to: 'testing#hello', as: :hello
      end
    end

    after do
        Rails.application.reload_routes!
    end

    teardown do
      Object.send(:remove_const, :TestingController)
    end

    context 'when user is logged in' do
      setup do
        @controller = TestingController.new
      end

      context 'and user has not manually set their password' do
        let(:user) { FactoryGirl.build(:user, manually_set_password: false) }
        setup do
                    login_as user
          get :hello
        end

        should 'redirect user to set their password' do
          assert_redirected_to new_password_path(user.password_token)
        end
      end
    end
  end
end

Это код оригинала от http://robots.thoughtbot.com/testing-a-before-filter, Я перешел на Rails 3

1 голос
/ 13 мая 2009

У меня есть пост о модульном тестировании до_фильтров легко, вы можете посмотреть. Надеюсь, это поможет.

0 голосов
/ 30 ноября 2010

Я сталкивался с этой проблемой.

Как насчет фильтров, которые выполняют действия, требующие запроса. то есть используя Flash

Пример использования метода Authlogic require_user не будет работать только при использовании ApplicationController.new.send (: some_filter).

https://github.com/binarylogic/authlogic_example/blob/master/app/controllers/application_controller.rb

У кого-нибудь есть какие-то нехакерские идеи о том, как тестировать подобные вещи в изоляции? (Я делаю это, создавая дополнительный фиктивный контроллер, который я использую только для тестирования.)

0 голосов
/ 31 октября 2008

Орион. Я несколько раз сталкивался с этим. Кроме того, большую часть времени фильтры являются частными, поэтому вам нужно отправить:

SomeController.new.send(:some_filter)
0 голосов
/ 30 октября 2008

Это зависит от того, что делают ваши фильтры.

Это: http://movesonrails.com/journal/2008/1/23/testing-your-application-controller-with-rspec.html

А также изучение того, как использовать мокко, поможет вам продвинуться вперед

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...