Всем привет!
Есть два контроллера posts и admin_posts (соответственно в контроллере posts запрещены экшены create, update, destroy - создавать может только админ из контроллера admin_posts).Тестирую экшены контроллера posts на отклик по http, а конкретно нужно потестить экшн update.
То есть если я делаю вот так
describe 'GET /edit_post' do
it 'works for edit post' do
get edit_post_path(post)
expect(response).to have_http_status(200)
end
end
То тест не проходит, что в принципе и должно быть. Но когда я хочу потестить залогиненого юзера
describe 'GET /edit_post' do
it 'works for edit post' do
user = FactoryGirl.create(:user, role: 'admin')
post = FactoryGirl.create(:post)
get edit_post_path(post)
expect(response).to have_http_status(200)
end
end
то шелл рендерит ошибку
Failures:
1) Posts GET /edit_post works for edit post
Failure/Error: get edit_post_path(post)
ActionView::Template::Error:
First argument in form cannot contain nil or be empty
как написать правильный тест?
вот собственно сам контроллер posts
class PostsController < ApplicationController
before_action :set_post, only: [:show]
respond_to :html
def index
@posts = Post.page(params[:page]).per(3)
respond_with(@posts)
end
def show
@comments = @post.comments.page(params[:comments_page]).per(3)
respond_with(@post)
end
def new
@post = Post.new
respond_with(@post)
end
def edit
end
def create
@post = Post.new(post_params)
@post.save
respond_with(@post)
end
def update
@post.update(post_params)
respond_with(@post)
end
def destroy
@post.destroy
respond_with(@post)
end
private
def set_post
@post = Post.find(params[:id])
end
def post_params
params.require(:post).permit(:title, :body, :photo)
end
end
юзаю гемы devise и cancan