0

Hartl の Rails チュートリアルの第 9 章の演習まで完了しました。私は何年も試してきましたが、質問6をクラックできません:

サインインしたユーザーは、コントローラーのnewおよびcreateアクションにアクセスする必要はありません。Usersそのようなユーザーがこれらのページにアクセスしようとすると、ルート URL にリダイレクトされるように手配します。

まず、これらのテストをどこに置くべきですか? 現在試しているところですuser_pages_spec.rbが、これが正しいかどうかはわかりません。では、ロジック自体はどこに配置すればよいのでしょうか。

第二に、これは私のテストがどのように見えるべきかです:

  describe "after signing-in" do
    before { sign_in(user) }
    describe "creating a new user" do
      before { put new_user_path }
      specify { response.should redirect_to(root_url) }
    end
  end

上記を実行した瞬間、RSpecが教えてくれます

応答はリダイレクトであると予想されていましたが、http://www.example.com/signin へのリダイレクトでした。 

しかし、サインインしているユーザーでアクセスしてブラウザでテストすると、http://localhost:3000/users/newリダイレクトはまったくありません (コードを書いていないので、これはより理にかなっています)。

私は github から Hartl のコードをダウンロードしたことさえありますが、彼がこの機能をどこに/どこに組み込んだのかわかりません。

編集: 私は両方を持っています

 describe "creating a new user" do
   before { visit new_user_path }
   it { should_not have_selector 'title', text: full_title('Sign Up') }
 end

 describe "creating a new user" do
   before { get new_user_path } # note the use of GET here not PUT
   specify { response.should redirect_to(root_url) }
 end

適切に動作するようにします。助けてくれた@Peter de Ridderに感謝

4

1 に答える 1

1

new_user_path を呼び出すときに put リクエストが発生する理由がよくわかりません。

describe "after signing-in" do
  let(:user) { FactoryGirl.create(:user) }
  before { sign_in user }

 describe "creating a new user" do
   before { get new_user_path }
   specify { response.should redirect_to(root_url) }
 end
end

これで、テストは想定どおりに動作するはずです。実際にリダイレクトを行うには、コードを記述する必要があります。しかし、それがすべての課題です。個人的には、ユーザーがサインイン/プレゼンスしているかどうかを確認します。その場合、新しいアクションと作成アクションにはアクセスできなくなります。

于 2013-02-01T19:31:01.223 に答える