Tôi đang cố gắng viết các kiểm tra và mã ứng dụng để chuyển hướng người dùng đã đăng nhập vào root_path nếu họ cố gắng TẠO người dùng hoặc truy cập đường dẫn người dùng MỚI .Hướng dẫn đường ray Ch. 9 Bài tập 6: Phản hồi dự kiến là <redirect>, nhưng là <200>
Dưới đây là các bài kiểm tra tôi đã viết trong user_pages_spec.rb:
describe "for signed in users" do
let(:user) { FactoryGirl.create(:user) }
before { sign_in user }
describe "using a 'new' action" do
before { get new_user_path }
specify { response.should redirect_to(root_path) }
end
describe "using a 'create' action" do
before { post users_path }
specify { response.should redirect_to(root_path) }
end
end
UsersController:
class UsersController < ApplicationController
before_action :unsigned_in_user, only: [:create, :new]
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
sign_in @user
flash[:success] = "Welcome to the Sample App!"
redirect_to @user
else
render 'new'
end
end
private
# Before filters
def user_params
params.require(:user).permit(:name, :email, :password,
:password_confirmation)
end
def unsigned_in_user
puts signed_in?
redirect_to root_url, notice: "You are already signed in." unless !signed_in?
end
end
Các puts signed_in?
lợi nhuận sai. Tôi giả định đây là vấn đề bởi vì tôi mong đợi nó sẽ trở lại sự thật. Dưới đây là các lỗi sau khi chạy thử nghiệm bằng rspec. Bất kỳ trợ giúp được đánh giá cao.
Failures:
1) User pages for signed in users using a 'create' action
Failure/Error: before { post users_path }
ActionController::ParameterMissing:
param not found: user
# ./app/controllers/users_controller.rb:52:in `user_params'
# ./app/controllers/users_controller.rb:20:in `create'
# ./spec/requests/user_pages_spec.rb:162:in `block (4 levels) in <top (required)>'
2) User pages for signed in users using a 'new' action
Failure/Error: specify { response.should redirect_to(root_path) }
Expected response to be a <redirect>, but was <200>
# ./spec/requests/user_pages_spec.rb:158:in `block (4 levels) in <top (required)>'
Trong tập tin sessions_helper.rb:
def signed_in?
!current_user.nil?
end
Trong đặc tả/support/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
Đăng mã cho signed_in? phương pháp. Vì nó đang trả lại một cái gì đó bạn không mong đợi, vấn đề có lẽ nằm ở đó. Đã thêm – amb110395
. Tôi mới đến đường ray nhưng tôi tự hỏi nếu thực tế là signed_in? được định nghĩa trong session_helper.rb và tôi đang cố gắng sử dụng nó trong bộ điều khiển người dùng (và không phải là bộ điều khiển phiên) đặt ra một vấn đề .. – IkegawaTaro
Chắc chắn sẽ gây ra vấn đề trừ khi bạn đưa SessionHelper vào trong ApplicationController của mình. Bạn đã làm điểu đó? – amb110395