Railsでrestful_authentication plugin を導入したら,今までのintegration testが 通らなくなった。理由は,login sessionが確立されていないかだが,どのように login sessionを integration test内で確立させるか?
% script/generate authenticated user sessionsで,sessions_controllerを作成したとき,test/functional/sessions_controller_test.rbが作成され,
def test_should_logout login_as :quentin get :destroy assert_nil session[:user_id] assert_response :redirect endというのがあるので,login_as methodが利用できると考えられる。しかし,単純にlogin_asを呼びだしても,
1) Error: test_comming_and_going_editing_acount_view_and_creating_new_category(AccountCategoryFlowsTest): NoMethodError: You have a nil object when you didn't expect it! The error occurred while evaluating nil.session /lib/authenticated_test_helper.rb:4:in `login_as' test/integration/account_category_flows_test.rb:17:in `test_comming_and_going_editing_acount_view_and_creating_new_category'と怒られる。そこでlogin_as methodがどのように定義されているかを確認すると,
lib/authenticated_test_helper.rb def login_as(user) @request.session[:user_id] = user ? (user.is_a?(User) ? user.id : users(user).id) : nil endとあるように,@requestを事前に準備していなければならない。その答えは,Rails forumの次のdiscussionにあった。 how to get a user in a functional test, with AuthenticatedSystem? より,
def setup @request = ActionController::TestRequest.new endsetupで,ActionController::TestRequestのインスタンスを@requestに作成しておけば login_as を実行しても怒られなくなった。
No comments:
Post a Comment