Test 10.22
应该是green
,但它是red
。我在create
中添加了users_controller
方法,并删除了另一个创建方法。是否可能创建错误或错误的其他原因?
如何解决这个问题?
感谢
错误和相关文件如下:
ERROR["test_invalid_signup_information", UsersSignupTest, 2016-03-23 16:43:47 +0000]
test_invalid_signup_information#UsersSignupTest (1458751427.59s)
AbstractController::ActionNotFound: AbstractController::ActionNotFound: The action 'create' could not be found for UsersController
test/integration/users_signup_test.rb:8:in `block (2 levels) in <class:UsersSignupTest>'
test/integration/users_signup_test.rb:7:in `block in <class:UsersSignupTest>'
test/integration/users_signup_test.rb:8:in `block (2 levels) in <class:UsersSignupTest>'
test/integration/users_signup_test.rb:7:in `block in <class:UsersSignupTest>'
ERROR["test_valid_signup_information", UsersSignupTest, 2016-03-23 16:43:47 +0000]
test_valid_signup_information#UsersSignupTest (1458751427.61s)
AbstractController::ActionNotFound: AbstractController::ActionNotFound: The action 'create' could not be found for UsersController
test/integration/users_signup_test.rb:21:in `block (2 levels) in <class:UsersSignupTest>'
test/integration/users_signup_test.rb:20:in `block in <class:UsersSignupTest>'
test/integration/users_signup_test.rb:21:in `block (2 levels) in <class:UsersSignupTest>'
test/integration/users_signup_test.rb:20:in `block in <class:UsersSignupTest>'
38/38: [=====================================================] 100% Time: 00:00:05, Time: 00:00:05
Finished in 5.52461s
38 tests, 153 assertions, 0 failures, 2 errors, 0 skips
和我的代码
# test/integration/users_signup_test.rb
require 'test_helper'
class UsersSignupTest < ActionDispatch::IntegrationTest
test "invalid signup information" do
get signup_path
assert_no_difference 'User.count' do
post users_path, user: {name: "",
email: "user@invalid",
password: "foo",
password_confirmation: "bar"}
end
assert_template 'users/new'
assert_select 'div#error_explanation'
assert_select 'div.field_with_errors'
end
test "valid signup information" do
get signup_path
assert_difference 'User.count', 1 do
post_via_redirect users_path, user: {name: "Example User",
email: "user@example.com",
password: "password",
password_confirmation: "password"}
end
# assert_template 'users/show'
# assert is_logged_in?
end
end
和
# app/controllers/users_corntroller.rb
class UsersController < ApplicationController
before_action :logged_in_user, only: [:index, :edit, :update, :destroy]
before_action :correct_user, only: [:edit, :update]
before_action :admin_user, only: :destroy
def show
@user = User.find(params[:id])
end
def new
@user = User.new
end
def edit
end
def update
if @user.update_attributes(user_params)
flash[:success] = "Profile updated"
redirect_to @user
else
render 'edit'
end
end
def index
@users = User.paginate(page: params[:page])
end
def destroy
User.find(params[:id]).destroy
flash[:success] = "User deleted"
redirect_to users_url
end
private
def user_params
params.require(:user).permit(:name, :email, :password,
:password_confirmation)
end
# Before filters
# Confirms a logged-in user.
def logged_in_user
unless logged_in?
store_location
flash[:danger] = "Please log in."
redirect_to login_url
end
end
# Confirms the correct user.
def correct_user
@user = User.find(params[:id])
redirect_to(root_url) unless @user == current_user
end
# Confirms an admin user.
def admin_user
redirect_to(root_url) unless current_user.admin?
end
def create
@user = User.new(user_params)
if @user.save
UserMailer.account_activation(@user).deliver_now
flash[:info] = "Please check your email to activate your account."
redirect_to root_url
else
render 'new'
end
end
end
答案 0 :(得分:0)
看起来您在控制器的私有部分中拥有create方法。将create方法移动到控制器的公共部分。我不是肯定的问题,但我不是在开发计算机上看自己。顺便说一下这是Mike Hartl的教程吗?