class PostsController < ActionController::Base
before_action :authenticate_user!
def index
@post = current_user.posts.paginate(page: params[:page], per_page: 5)
respond_to do |format|
format.html
format.json { render json: @post }
end
end
def new
@post = Post.new
end
def create
@post = current_user.posts.build(post_param)
if @post.save
redirect_to action: 'index'
else
render 'new'
end
require 'test_helper'
class PostsControllerTest < ActionController::TestCase
include Devise::TestHelpers
def setup
@user = users(:Bob)
@post = Post.new
end #passed
test 'logged in should get show' do
sign_in @user
get :index
assert_response :success
end #passed
test 'not authenticated should get redirect' do
get :index
assert_response :redirect
end #passed
test 'should get index' do
get :index
assert_response :success
assert_not_nil assigns(:posts)
end #failing
test "should destroy post" do
assert_difference('Post.count', -1) do
delete :destroy, id: @post
end
assert_redirected_to posts_path
end #failing
...
devise
设置正常,但为什么我在最后两种情况下出现302
错误。是因为我没有将@user
参数传递给它吗?我做了但它仍然抛出相同的错误。我还检查了我的routes
文件,这很好,因为post_controller
在开发模式下工作正常。
我在这里做错了什么?
我尝试为create
方法
def setup
@user = users(:bob)
@p = posts(:one)
@post = Post.new
end
test 'should create post' do
sign_in @user
assert_difference('Post.count') do
post :create, post: { name: @p.name, value: @p.value}
end
end
我在我的控制器课程中得到ActionController::ParameterMissing: param is missing or the value is empty: post
params.require(:post).permit(:name, :value, :user_id)
我的.yml
文件中也包含所有参数,即
one:
name: 2
value: 3
答案 0 :(得分:0)
在尝试索引操作之前,您似乎需要登录。您还在测试错误的实例变量名称。你正在测试@posts,但是你已经在控制器中定义了@post。请尝试此测试:
test 'should get index' do
sign_in @user
get :index
assert_response :success
assert_not_nil assigns(:post)
end