Тестирование запросов с перенаправлениями в RSpec - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь проверить запрос post, который имеет перенаправление в случае успеха:

class PostsController < ApplicationController
  def create
    @post = Post.new(post_params)

    if @post.save
      redirect_to @post, notice: 'Post was successfully created.'
    else
      render :new
    end
  end
end

Мне было интересно, можно ли вообще проверить, получаю ли я код ответа 201 до перенаправления. Вот как у меня сейчас есть мой код. Это будет ошибка, потому что перенаправление происходит первым:

RSpec.describe 'Posts', type: :request do
  describe 'POST #create' do
    it 'has a 201 response code' do
      post posts_path, params: { post: valid_attributes }

      expect(response).to have_http_status(201)
    end
  end
end

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Вы можете проверить, что сообщение было создано и что пользователь был перенаправлен, если параметры верны. И если у вас есть какая-либо проверка в модели Post, рекомендуется проверить неверные параметры:

RSpec.describe 'PostsController', type: :request do
  describe 'POST #create' do
    context 'with valid params' do
      it 'creates a new post' do
        expect { post posts_path, params: { post: valid_attributes } }.to change(Post, :count).by(1)        
        expect(response).to redirect_to post_path(Post.last)
      end
    end

    context 'with invalid params' do
      it 'does not create a new post' do
        expect { post posts_path, params: { post: invalid_attributes } }.not_to change(Post, :count)
        expect(response).to have_http_status 200
      end
    end
  end
end
0 голосов
/ 17 января 2019

Ваш код ответа будет 302, так как сообщение успешно создается. В приведенном вами примере кода вы не получите 201 обратно. Вы можете проверить, что вы не получили 201

expect(response).to_not have_http_status(201).

Создание новой модели Post не возвращает код состояния HTTP. Создает строку в базе данных. Если вы хотите убедиться, что сообщение было создано, вы можете проверить, что количество сообщений в начале теста равно 0, а в конце - 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...