2

サインインしていないユーザーがユーザー コントローラーの編集または更新アクションにアクセスしようとすると、アプリはリダイレクトする必要があります (サインイン ページまたは root_path など)。アプリは正常に動作しますが、このためのテストは次のエラーで失敗します:

Failure/Error: specify { response.should redirect_to(signin_path) }
Expected response to be a redirect to <http://www.example.com/signin> but was a redirect to <https://www.example.com/users/468>
# ./spec/requests/authentication_pages_spec.rb:69:in `block (6 levels) in <top (required)>'

ここで何が問題になる可能性がありますか?それをデバッグする方法は?

すべてのコードはこちら: https://github.com/tomek-rusilko/miniatury_katalog_2 失敗したテストはこちら: https://github.com/tomek-rusilko/miniatury_katalog_2/blob/master/spec/requests/authentication_pages_spec.rb (行: 63 および 105)

4

1 に答える 1

2

最後に、これを再訪する時間がありました。コードを github から取得しましたが、同じ問題がありました。私はこれにテストを切り詰めました:

require 'spec_helper'

describe "A non-signed_in user directly issuing PUT to the update action" do
  before { put user_path(7) }
  specify { response.should redirect_to(signin_path) }          
end

ご指摘のとおり、コントローラー コードの binding.pry は、思ったように実行を停止しませんでした。多くの役に立たない掘り下げ/グーグル検索の後、最終的にlog/test.logで気づきました:

Started PUT "/users/7" for 127.0.0.1 at 2012-05-23 16:17:31 -0400
Processing by UsersController#update as HTML
  Parameters: {"id"=>"7"}
Redirected to https://www.example.com/users/7
Filter chain halted as #<Proc:0x00000102201608@/Users/eric_mccullough/ruby/railstutorial/tomek-rusilko-miniatury_katalog_2-e73d795/vendor/ruby/1.9.1/gems/actionpack-3.2.3/lib/action_controller/metal/force_ssl.rb:28> rendered or redirected
Completed 301 Moved Permanently in 1ms (ActiveRecord: 0.0ms)
   (0.1ms)  rollback transaction
   (0.1ms)  begin transaction

SSL を使用しようとしていたことを示します。Rails チュートリアルの私のバージョンでは、本番環境でのみ SSL を使用しています。「force_ssl」を application_controller.rb から削除すると、すべてのテストに合格しました。私はまだ Rails を使い始めたばかりで、ログがあることにさえ気づきませんでしたが、今ならわかります!

于 2012-04-25T15:50:28.773 に答える