I found a way around this, though I still have no clue why this works: In my controller, if I add:
def show end The before filter DOES NOT run, as I expect, as soon as I remove the def show;end the filter is once again applied to the #show action. Is this a Rails3 bug? -John On May 27, 3:27 pm, John Postlethwait <john.postlethw...@gmail.com> wrote: > This is apparently not related to Shoulda... This test also fails > using Test::Unit by itself: > > test 'A guest on GET to #show' do > get :show, { :id => users(:alexander).id } > > assert flash.empty? > assert_not_nil assigns(:user) > assert_response :success > end > > Failure: > 1) Failure: > test_A_guest_on_GET_to_#show(UsersControllerTest) [test/functional/ > users_controller_test.rb:44]: > <false> is not true. > > Line 44 is the flash being empty, it is, once again set to: > {:error=>"Sorry! You need to log in before visiting that page."} > > Am I missing something obvious? Why is this filter always running? Is > this related to Rails3? > > Thanks in advance. > > -John Postlethwait > > On May 27, 1:07 pm, John Postlethwait <john.postlethw...@gmail.com> > wrote: > > > > > I'm using Shoulda and restful_authentication on Rails3 and whenever I > > run my tests a before filter for login_required is always triggered, > > despite my filter being set up as: > > > before_filter :login_required, :only => > > [:update, :edit, :suspend, :unsuspend, :destroy, :purge] > > > My test is this: > > > context 'A guest to the site' do > > context 'on GET to :show' do > > setup { get :show, { :id => users(:alexander).id } } > > > should_not_set_the_flash > > should_assign_to :user > > should_respond_with :success > > end > > end > > > The test fails though: > > > 3) Failure: > > test: A guest to the site on GET to :show should assign @user. > > (UsersControllerTest) > > []: > > Expected action to assign a value for @user > > > 4) Failure: > > test: A guest to the site on GET to :show should not set the flash. > > (UsersControllerTest) > > []: > > Did not expect the flash to be set, but was {:error=>"Sorry! You > > need to log in before visiting that page."} > > > 5) Failure: > > test: A guest to the site on GET to :show should respond with > > success. (UsersControllerTest) > > []: > > Expected response to be a 200, but was 302 > > > Here is the code for my before_filter that is actually making this > > test fail: > > > def login_required > > authorized? || access_denied > > end > > > def access_denied > > session[:return_to] = request.fullpath > > flash[:error] = t('application.flash.error.login_required') > > > redirect_to(new_sessions_path) > > end > > > This code, as far as my understanding goes, should NOT ever be called > > from this test though... I have the :only => [] in the controller to > > not do it on show. Can anyone lend any insight as to why it is being > > triggered? Another strange thing is this DOES NOT happen in production > > or development modes using the browser. I can be logged out and visit > > this page just fine without this before_filter being called. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-t...@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-talk+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.