ActiveRecord :: RecordNotFound rspec, как проверить - PullRequest
0 голосов
/ 22 ноября 2018

У меня такая же проблема.Я не знаю, как проверить неверную запись в этом случае.Помогите мне, пожалуйста, кто-нибудь.

Нужно посмотреть: тема с неправильным sms_campaign_id и в "нем"

error.log

ActiveRecord :: RecordNotFound: Не удалось найти SmsCampaignс 'id' = 12314151 [WHERE sms_campaigns. company_id = 66 AND sms_campaigns. company_id =?]

messages_controller_spec.rb

describe PrivateApi::Company::SmsCampaigns::MessagesController do
  let(:company) { create :company, :completed, :with_superuser }
  let(:sms_campaign) { create :sms_campaign, company: company }

  describe 'GET index' do
    let(:user) { create(:user, company: company) }
    before(:each) { signin user }

    context 'when user logged with invalid sms_campaign_id' do
    subject(:index_action_invalid) { get :index, sms_campaign_id: 12314151 }

    it 'The wrong sms_campaingn_id' do
      index_action_invalid
      expect(response).to have_http_status(200)
      expect(response.content_type).to eq(Mime::JSON)
    end
  end
 end
end

messages_controller.rb

# frozen_string_literal: true

module PrivateApi
  module Company
    module SmsCampaigns
      # Resource controller to fetch all the additional messages of given SMS campaign
      class MessagesController < ::PrivateApi::Company::BaseController
        def index
          sms_campaign = SmsCampaign.where(company: @company).
            accessible_by(current_ability, :read).find(params[:sms_campaign_id])
          messages = sms_campaign.messages.order(send_at: :desc)

          render json: messages
        end
      end
    end
  end
end

1 Ответ

0 голосов
/ 22 ноября 2018

Если вы не спасаете ActiveRecord::RecordNotFound где-то в контроллере (ах), тогда этот код выдаст ошибку и вернет код состояния 404.

Если вы пытаетесь это проверитьВозникнет исключение, вам нужно использовать средство сопоставления expect { <block_of_code> }.to raise_error <error_class>

Если исключение не следует вызывать, то проверьте обработчик исключений, потому что он не вызывается.

Если выЧтобы сделать это без поднятия ActiveRecord::RecordNotFound, вам нужно будет переключить find(id) с where(id: id).first

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