Webアプリケーション制作の勉強中です。RSpecでテストを成功させようとしたら ActiveRecord::RecordNotUniqueが出てしまい
テストが失敗してしまいます。このテストを成功させたくて困っております。テストコードとエラーは以下になります。
テストコード
require 'rails_helper' describe Staff::AccountsController do describe '#update' do let(:params_hash) { attributes_for(:staff_member) } let(:staff_member) { create(:staff_member) } before do session[:staff_member_id] = staff_member.id end example 'email属性を変更する' do params_hash.merge!(email: 'test@example.com') patch :update, params:{id: staff_member.id, staff_member: params_hash} staff_member.reload expect(staff_member.email).to eq('test@example.com') end example '例外ActionController::ParameterMissingが発生' do bypass_rescue expect { patch :update, params:{id: staff_member.id}} . to raise_error(ActionController::ParameterMissing) end example 'end_dateの値は書き換え不可' do params_hash.merge!(end_date: Date.tomorrow) expect { patch :update, params:{id: staff_member.id, staff_member: params_hash} }.not_to change { staff_member.end_date } end end end
テストコード実行結果
[vagrant@localhost chibi]$ bin/rspec spec/controllers/staff/accounts_controller_ spec.rb Running via Spring preloader in process 16066 .FF Failures: 1) Staff::AccountsController#update 例外ActionController::ParameterMissingが発 生 Failure/Error: let(:staff_member) { create(:staff_member) } ActiveRecord::RecordNotUnique: Mysql2::Error: Duplicate entry 'member3@example.com' for key 'index_staff _members_on_email_for_index': INSERT INTO `staff_members` (`email`, `email_for_i ndex`, `family_name`, `given_name`, `family_name_kana`, `given_name_kana`, `hash ed_password`, `start_date`, `created_at`, `updated_at`) VALUES ('member3@example .com', 'member3@example.com', '山田', '太郎', 'ヤマダ', 'タロウ', '$2a$10$zUoRCk T71mFQ/ZVFNpbFBuAjUWzHTJ.lZJaUnBw0FdFbMMpwIx2XK', '2017-08-14', '2017-08-15 05:0 5:04', '2017-08-15 05:05:04') # ./spec/controllers/staff/accounts_controller_spec.rb:6:in `block (3 level s) in <top (required)>' # ./spec/controllers/staff/accounts_controller_spec.rb:9:in `block (3 level s) in <top (required)>' # -e:1:in `<main>' # ------------------ # --- Caused by: --- # Mysql2::Error: # Duplicate entry 'member3@example.com' for key 'index_staff_members_on_e mail_for_index' # ./spec/controllers/staff/accounts_controller_spec.rb:6:in `block (3 lev els) in <top (required)>' 2) Staff::AccountsController#update end_dateの値は書き換え不可 Failure/Error: let(:staff_member) { create(:staff_member) } . . . . Finished in 0.42558 seconds (files took 0.616 seconds to load) 3 examples, 2 failures Failed examples: rspec ./spec/controllers/staff/accounts_controller_spec.rb:19 # Staff::AccountsC ontroller#update 例外ActionController::ParameterMissingが発生 rspec ./spec/controllers/staff/accounts_controller_spec.rb:25 # Staff::AccountsC ontroller#update end_dateの値は書き換え不可
上記でテストが失敗していますが、自分で調べてみたら一意性のデータと重複したデータです。みたいな感じでした。
(解釈が間違っているかもしれません。)
let(:staff_member) { create(:staff_member) } のコードでテストが失敗しているようですがテストを成功させるには
どうしたらいいのでしょうか?記述ミスなどあるのでしょうか?どなたか教えてください。宜しくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/17 13:12
2017/12/17 13:23