Ruby on Rails5速習実践ガイドでRailsについて学んでいます。
現在5章Rspecについての学習を行なっているのですが、SystemSpecファイルに表題の内容で(not null制約のnameカラムに対し空白のまま登録)エラーを期待するテストを書いて実行したところ、not nullに引っかかることなく登録されてしまいました。
rails sでアプリの挙動をブラウザで確認しても登録できていました。
なぜnot null制約をかけているはずなのに登録ができてしまうのか教えていただけると幸いです。
【not null制約をかけたマイグレーションファイル】
20200614061232_change_tasks_name_not_null.rb
class ChangeTasksNameNotNull < ActiveRecord::Migration[5.2] def change change_column_null :tasks, :name, false end end
【マイグレーションの状況】
Status Migration ID Migration Name -------------------------------------------------- up 20200506094649 Create tasks up 20200614061232 Change tasks name not null up 20200614063610 Change tasks name limit30 up 20200614080657 Create users up 20200707004117 Add admin to users up 20200715004506 Add user id to tasks
【エラーとなったテスト箇所】
describe 'タスク管理機能', type: :system do let(:user_a) { FactoryBot.create(:user, name: 'ユーザーA', email: 'a@example.com') } let(:user_b) { FactoryBot.create(:user, name: 'ユーザーB', email: 'b@example.com') } let!(:task_a) { FactoryBot.create(:task, name: '最初のタスク', user: user_a) } before do visit login_path fill_in 'メールアドレス', with: login_user.email fill_in 'パスワード', with: login_user.password click_button 'ログインする' end describe '新規作成機能' do let(:login_user) { user_a } before do visit new_task_path fill_in '名称', with: task_name click_button '登録する' end context '新規作成画面で名称を入力しなかった時' do let(:task_name) { '' } #↓以下のテストが通らなかった it 'エラーとなる' do # withinで指定した要素の中のみで期待した要素が存在するかをチェックする within '#error_explanation' do expect(page).to have_content '名称を入力してください' end end end end end
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/23 07:28