こんにちは。
Rails4でRspec3を使ってspecを作成しています。
modelでvalidationエラーが発生したときにcontrollerでexceptionをキャッチすることは可能でしょうか?
rspsecでcontrollerのテストを書いているのですが、specが通らず。。。
controllerが悪いのか、modelが悪いのか、specが悪いのかよく分かっていません。。。
以下にそれぞれ記載します。
お教えいただけると大変助かります。
よろしくお願いします!!
controller createメソッド
lang
1class BlogTextsController < ApplicationController 2 def create(blog_texts , index_id) 3 begin 4 logger.debug("#{Time.now} blog_texts_controler create start!!") 5 #ハッシュを配列に変換する 6 @text_array=blog_texts.values 7 @blog_texts=[] 8 logger.debug("textの個数は#{@text_array.size}です") 9 logger.debug("textの個数は#{index_id}です") 10 #blog_textesのnew呼び出す。 11 for text_id in 0..@text_array.size - 1 do 12 BlogText.create(:index_id=>index_id,:text_id=>text_id ,:text=>@text_array[text_id]) 13 logger.debug("#{@text_array.size}個中 #{text_id + 1}個目を登録しました。") 14 end 15 rescue => e 16 p e 17 ensure 18 logger.debug("#{Time.now} blog_texts_controler create end!!") 19 end 20 end 21end 22
model textがnullであればvalidationエラー
lang
1class BlogText < ActiveRecord::Base 2 #blog_iindexと多対1の関係 3 belongs_to :blog_index 4 #valudate textは必須 5 validates :text, presence: true 6 def self.find_by_index_id(index_id) 7 blog_images=BlogText.select(:text_id,:text).where(index_id: index_id) 8 end 9 10 def self.fild_by_detail(id) 11 blog_texts=BlogText.where(id: id) 12 end 13 14end
spec エラーパターンのテスト箇所
lang
1RSpec.describe BlogTextsController, :type => :controller do 2 describe "POST #create" do 3 #無効な属性の場合 4 context "with invalid attributes" do 5 # データベースに新しいタスクを保存すること 6 it "returns an error " do 7 blog_texts_controller=BlogTextsController.new 8 expect{ 9 text_array_size=blog_texts_controller.create(@invalid_params,@blog_index.id) 10 }.to raise_error ("message") 11 end 12 end 13 end 14end
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。