質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

1604閲覧

Rspec でテストコードを書いています

mnhy613

総合スコア21

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/05/23 02:52

Rails でテストコードを書くために以下のgemをインストールしました

Gemfile

1group :test do 2 # Adds support for Capybara system testing and selenium driver 3 gem 'capybara', '>= 2.15' 4 gem 'rspec-rails' 5 gem "factory_bot_rails" 6 gem 'faker' 7end 8

下記のようにファイルを作成しました

spec/factories/comment.rb

ファイルに記述した内容

FactoryBot.define do factory :comment do title { 'テストタイトル' } taste { '3' } healthy { '3' } cost_performance { '3' } item_code { 'test:00000' } content { 'テストコンテント' } association :user end end

コメントモデルのテストをするために

comment_spec.rbに

ruby

1RSpec.describe 'Commentモデルのテスト', type: :model do 2 describe 'バリデーションのテスト' do 3 let(:user) { create(:user) } 4 let(:comment) { create(:comment, user_id: user.id) } 5 6 context 'titleカラム' do 7 it '空欄でないこと' do 8 comment.title = '' 9 expect(comment.valid?).to eq false; 10 end 11 it 'タイトルが50文字超だと無効な状態であること' do 12 comment.title = 'a' * 51 13 comment.valid? 14 expect(comment.errors[:title]).to include('は50文字以内で入力してください') 15 end 16 end 17 18 context 'contentカラム' do 19 it '空欄でないこと' do 20 comment.content = '' 21 expect(comment.content.valid?).to eq false; 22 end 23 it '200文字以下であること' do 24 comment.content = Faker::Lorem.characters(number:201) 25 expect(comment.content.valid?).to eq false; 26 end 27 end 28 end 29 30〜〜〜〜以下にも続く

テストを通すと

NameError: undefined local variable or method `content' for #<RSpec::ExampleGroups::Comment::Nested::Content:0x000055a08ad23d10>

大半のエラーがこのように出ています

どこが間違っているのでしょうか

commentは

RSpec.describe 'Commentモデルのテスト', type: :model do describe 'バリデーションのテスト' do let(:user) { create(:user) } let(:comment) { create(:comment, user_id: user.id) }

これで定義できているのだと思っていたのですが

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

エラー文の意味は「ローカル変数が定義されていない」

おそらくですが、FactoryBotからデータが引っ張れていないので、
commentのcontent属性を参照しようとされている部分で、contentがキーでは無くローカル変数と認識されてしまっているのではないでしょうか。

let(:comment) { create(:comment, user_id: user.id) }let(:comment) { FactoryBot.create(:comment, user_id: user.id) }に変更してはどうでしょうか?

投稿2020/05/24 00:45

_Taturon_

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mnhy613

2020/05/25 06:04

ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問