前提・実現したいこと
今、Railsで開発したアプリのテストをRSpecで行っています。
そのアプリには通知機能があり、通知を削除するテストが通らないので、
解決策を教えていただけますと幸いです。
発生している問題・エラーメッセージ
ruby
1NotificationsController 2 DELETE #destroy 3 ユーザーがログインしている場合 4 通知を削除できること (FAILED - 1) 5 6Failures: 7 8 1) NotificationsController DELETE #destroy ユーザーがログインしている場合 通知を削除できること 9 Failure/Error: expect{ subject }.to change(Notification, :count).by(-1) 10 expected `Notification.count` to have changed by -1, but was changed by 0 11 # ./spec/controllers/notifications_controller_spec.rb:52:in `block (4 levels) in <top (required)>' 12 13Finished in 0.24758 seconds (files took 1.48 seconds to load) 141 example, 1 failure 15 16Failed examples: 17 18rspec ./spec/controllers/notifications_controller_spec.rb:50 # NotificationsController DELETE #destroy ユーザーがログインしている場合 通知を削除できること 19
該当のソースコード
▼notifications_controller_spec.rb
ruby
1require 'rails_helper' 2 3describe NotificationsController do 4 let(:user) { create(:user) } 5 let(:notification) { create(:notification) } 6 7 describe 'DELETE #destroy' do 8 subject { 9 delete :destroy, 10 params: {id: notification.id} 11 } 12 13 context "ユーザーがログインしている場合" do 14 before do 15 login user 16 end 17 18 it "通知を削除できること" do 19 expect{ subject }.to change(Notification, :count).by(-1) 20 end 21 end 22 end 23 24end
▼spec/factories/notifications.rb
ruby
1FactoryBot.define do 2 factory :notification do 3 association :visitor, factory: :user 4 association :visited, factory: :user 5 checked { true } 6 action { "message" } 7 end 8end
▼app/models/notification.rb
ruby
1class Notification < ApplicationRecord 2 default_scope->{order(created_at: :desc)} 3 4 belongs_to :group, optional: true 5 belongs_to :visitor, class_name: 'User', foreign_key: 'visitor_id' 6 belongs_to :visited, class_name: 'User', foreign_key: 'visited_id' 7 ACTION_VALUES = ["message", "follow"] 8 validates :action, presence: true, inclusion: {in: ACTION_VALUES} 9 validates :checked, presence: true, inclusion: {in: [true, false]} 10end
▼notifications_controller.rb
ruby
1class NotificationsController < ApplicationController 2 before_action :authenticate_user! 3 4 def destroy 5 notification = Notification.find(params[:id]) 6 notification.destroy 7 redirect_to notifications_path 8 end 9 10end
試したこと
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。