こんにちは。
昔のRSpecの記事を見ていて、それを今風に変えようとチャレンジしていますが、うまくいかないので相談させていただきます。
参考URL:[http://magazine.rubyist.net/?0021-Rspec#l58]
テスト内容
- ブログ投稿のnameにvalidationで、投稿時に必須にする
- 入力されていない場合はnameにエラーを持つ
・前提条件
app/models/blog.rb class Blog < ActiveRecord::Base validates :name, presence: true end
spec/fixtures/blogs.yml one: id: 1 name: 今日の出来事その1 two: id: 2 name: 今日の出来事その2
db/migrate/XX_create_blogs.rb class CreateBlogs < ActiveRecord::Migration def change create_table :blogs do |t| t.string :name, null: false t.timestamps null: false end end end
spec/models/blog_spec.rb require 'rails_helper' RSpec.describe Blog, type: :model do pending "add some examples to (or delete) #{__FILE__}" end describe Blog, 'when not set #name' do before(:each) do @blog = Blog.new end it 'expect be valid' do expect(@blog).not_to be_valid end #これがエラーになります it 'name have error' do expect(@blog.errors[:name]).to be_present end end
エラーメッセージ Failures: 1) Blog when not set #name name have error Failure/Error: expect(@blog.errors[:name]).to be_present expected `[].present?` to return true, got false # ./spec/models/blog_spec.rb:17:in `block (2 levels) in <top (required)>' Finished in 0.03023 seconds (files took 1.72 seconds to load) 3 examples, 1 failure, 1 pending
なぜ、エラーメッセージがないのかがわからないです。
下が参考にしていたホームページの書き方ですが、haveが使えなくなっているようなので、書き方を変更しております。
it ":name にエラーが設定されていること" do @blog.should have(1).errors_on(:name) end
お手数をおかけしますが、何卒宜しくお願いします>_<
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。