Rails Разработка нескольких моделей тестирования ошибок на перенаправлениях - PullRequest
0 голосов
/ 17 мая 2019

На самом деле я пишу некоторые тесты, используя Rspec, для приложения Rails, использующего Devise.Я следовал руководству по нескольким моделям и все работает нормально, но в моих тестах правила перенаправления не реализованы правильно.

Так что в моем контроллере у меня есть это:

class CoachesController < ApplicationController
  protect_from_forgery except: :update

  before_action :authenticate_coach!, except: [:index, :show]
  before_action :authenticate_athlete!, only: [:index, :show]
  before_action :set_coach, except: :index

  def index
    if current_athlete and current_athlete.coach_id.present?
      redirect_to booking_coach_path(current_athlete.coach_id)
    else
      @coaches = Coach.all
    end
  end

  # ...
end

Доступ к индексу тренеров # в сеансе тренера должен перенаправить на authenticated_coach_root_path, и вместо этого во время моего теста перенаправление на athlete_session_new ... Я думаю, это может быть связано с concern:

module Accessible
  extend ActiveSupport::Concern
  included do
    before_action :check_user
  end

  protected

  def check_user
    if current_coach
      flash.clear
      redirect_to(authenticated_coach_root_path) && return
    elsif current_athlete
      flash.clear
      redirect_to(authenticated_athlete_root_path) && return
    end
  end
end

Вот мой тест:

require 'rails_helper'

RSpec.describe CoachesController, type: :controller do
  describe 'GET #index' do
    context 'when athlete is logged in' do
      let(:coach) { build_stubbed(:coach) }
      login_athlete

      it 'redirects to coach booking url if has an associated coach' do
        subject.current_athlete.coach_id = coach.id

        get :index
        is_expected.to redirect_to(booking_coach_path(subject.current_athlete.coach_id))
      end

      it 'renders index template if has no associated coach' do
        get :index
        is_expected.to render_template(:index)
      end
    end

    context 'when coach is logged in' do
      login_coach

      it 'redirects to coach dashboard url' do
        get :index
        is_expected.to redirect_to(authenticated_coach_root_path)
      end
    end
  end
end

Может быть, я должен что-то добавить в свою конфигурацию Rspec, чтобы позаботиться об этом?

Заранее спасибо за помощь!

...