Задать вопрос
@weare138

Rspec.Как передать в экшн edit админа?

Всем привет!
Есть два контроллера 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
  • Вопрос задан
  • 2330 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@vsuhachev
Нужно выполнить вход пользователя после создания

user = FactoryGirl.create(:user, role: 'admin')
sign_in user


Ну и rspec-хэлперы от Devise не забудьте включить
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы