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

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

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

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

Ruby on Rails

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

テスト駆動開発

テスト駆動開発は、 プログラム開発手法の一種で、 プログラムに必要な各機能をテストとして書き、 そのテストが動作する必要最低限な実装を行い コードを洗練させる、といったサイクルを繰り返す手法の事です。

Q&A

0回答

1106閲覧

rspecテストのエラー(KeyError)を解決したい

wavewaller

総合スコア0

RSpec

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

Ruby on Rails

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

テスト駆動開発

テスト駆動開発は、 プログラム開発手法の一種で、 プログラムに必要な各機能をテストとして書き、 そのテストが動作する必要最低限な実装を行い コードを洗練させる、といったサイクルを繰り返す手法の事です。

0グッド

0クリップ

投稿2021/03/26 22:55

rspecテストのエラー(KeyError)

KeyError:が出てしまい、テストコードが通りません。最初はNoMethodErrorが出てしまいましたが、そちらはメソッド名のところをassociation:user,Class: Userとすることで解決しましたが、今度出たKeyErrorはいろいろ試してみましたが解決しません。
どのようにすれば解決できるのか、教えていただきたいです。

発生している問題・エラーメッセージ

cyphornoMacBook-Pro:taskfolder cyphor$ bundle exec rspec spec/system/tasks_spec.rb F Failures: 1) タスク管理機能 一覧表示機能 ユーザーAがログインしているとき ユーザーAが作成したタスクが表示される Failure/Error: user_a = FactoryBot.create(:user, name: 'ユーザーA', email: 'a@example.com') KeyError: Factory not registered: "user" older/tmp/screenshots/failures_r_spec_example_groups_nested_nested_a_ユーザーaが作成したタスクが表示される_809.png # ./spec/system/tasks_spec.rb:7:in `block (3 levels) in <top (required)>' # ------------------ # --- Caused by: --- # KeyError: # key not found: "user" # ./spec/system/tasks_spec.rb:7:in `block (3 levels) in <top (required)>' Finished in 1.27 seconds (files took 1.93 seconds to load) 1 example, 1 failure Failed examples: rspec ./spec/system/tasks_spec.rb:27 # タスク管理機能 一覧表示機能 ユーザーAがログインしているとき ユーザーAが作成したタスクが表示される

該当のソースコード

spec/system/tasks_spec.rb

require 'rails_helper' describe 'タスク管理機能', type: :system do describe '一覧表示機能' do before do # TODO1:ユーザーAを作成しておく user_a = FactoryBot.create(:user, name: 'ユーザーA', email: 'a@example.com') # ハッシュを省略しないで記載すると、 # user_a = FactoryBot.create(:user, "name" => 'ユーザーA', "email" => 'a@example.com') # TODO2: 作成者がユーザーAであるタスクを作成しておく FactoryBot.create(:task, name: '最初のタスク', user: user_a) end context 'ユーザーAがログインしているとき' do before do # TODO3: ユーザーAでログインする # TODO3-1:ログイン画面にアクセスする visit login_path # TODO3-2:メールアドレスを入力する fill_in 'メールアドレス', with: 'a@example.com' # TODO3-3:パスワードを入力する fill_in 'パスワード', with: 'password' # TODO3-4:「ログインする」ボタンをおす click_button 'ログインする' end it 'ユーザーAが作成したタスクが表示される' do # TODO4: 作成済みのタスクの名称が画面上に表示されていることを確認 expect(page).to have_content '最初のタスク' end end end end

spec/factories/tasks.rb

ruby

1FactoryBot.define do 2 factory :task do 3 name { 'テストを書く' } 4 description { 'RSpec&Capybara&FactoryBotを準備する' } 5 association :user, factory: admin_user 6 end 7end

spec/factories/users.rb

FactoryBot.define do factory :admin_user, class: User do name { 'テストユーザー' } email { 'test1@example.com' } password { 'password' } end end

spec/spec_helper.rb(FactoryBot該当部分)

require 'capybara/rspec' RSpec.configure do |config| config.before(:all) do driven_by :selenium_chrome_headless FactoryBot.reload end ・・・ end

試したこと

・springに問題がある場合を考慮し、spec_helper.rbにFactoryBot.reloadを導入
・spring stopを行い、再起動

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問