マイケル・ハートルによるレールチュートリアルでは、仕様を理解できません:
require 'spec_helper'
describe "Authentication" do
.
.
.
describe "authorization" do
.
.
.
describe "as wrong user" do
let(:user) { FactoryGirl.create(:user) }
let(:wrong_user) { FactoryGirl.create(:user, email: "wrong@example.com") }
before { sign_in user, no_capybara: true }
describe "visiting Users#edit page" do
before { visit edit_user_path(wrong_user) }
it { should_not have_title(full_title('Edit user')) }
end
describe "submitting a PATCH request to the Users#update action" do
before { patch user_path(wrong_user) }
specify { expect(response).to redirect_to(root_url) }
end
end
end
end
ご覧のbefore { sign_in user, no_capybara: true }
とおり、作成者は各例の前にユーザーをサインインするために使用します。no_capybara
オプションは次のように宣言されています。
仕様/サポート/utilities.rb
.
.
.
def sign_in(user, options={})
if options[:no_capybara]
# Sign in when not using Capybara.
remember_token = User.new_remember_token
cookies[:remember_token] = remember_token
user.update_attribute(:remember_token, User.encrypt(remember_token))
else
visit signin_path
fill_in "Email", with: user.email
fill_in "Password", with: user.password
click_button "Sign in"
end
end
彼がチュートリアルで指摘したように:これは、HTTPリクエストメソッドの1つを直接(get、post、patch、またはdelete)使用する場合に必要です(彼はno_capybaraオプションを意味します)。これにより、「PATCHリクエストをUsers#update アクション "使用中の パッチメソッドがありますが、上記の sign_in メソッドとこの行 (パッチ メソッドの) との関係は何ですか? 私の理解では、パッチを使用する前にsign_inが使用されていると思います。 no_capybaraの