我正在嘗試編寫測試和應用程序代碼以將已登錄到root_path的用戶重定向,如果他們嘗試創建用戶或訪問NEW用戶路徑。Rails教程Ch。 9練習6:預期的響應是<redirect>,但是<200>
下面是我寫在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
的puts signed_in?
返回false。我認爲這是問題,因爲我希望它會返回true。以下是使用rspec運行測試後的錯誤。任何幫助表示讚賞。
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)>'
內sessions_helper.rb文件:
def signed_in?
!current_user.nil?
end
在規格/支持/ 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
發佈signed_in的代碼?方法。既然它正在回報你沒有想到的東西,那麼問題可能就在於此。添加了 – amb110395
。我是新來的鐵軌,但我想知道是否signed_in事實?在sessions_helper.rb中定義,我試圖在用戶控制器(而不是會話控制器)中使用它會帶來問題.. – IkegawaTaro
肯定會導致問題,除非您在ApplicationController中包含SessionHelper。是你做的嗎? – amb110395