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

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

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

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

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

Q&A

解決済

1回答

1101閲覧

feature specをsystem specに変更したらseed.rbで用意したマスタデータが削除されるようになった

genki0126

総合スコア33

Ruby on Rails 5

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

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

0グッド

0クリップ

投稿2022/01/28 13:10

概要

目標と課題の管理をするWebサービスを作成しています。
下記のモデルで目標と課題の状態の設定値を定義しており、
seed.rbを実行してDBに投入しています。
モデル:goal_states, task_states

コード欄に記載の「spec/system/tasks_spec.rb」を実行すると
同じ内容のテストを2回実行するのですが、1回目はOK、2回目がNGになってしまいます。

以前はfeature specとして実装していたのですが、その時はこの症状は発生しませんでした。
system specに書き換えて実行したところ発生するようになりました。

コントローラ側にログを仕込んで表示してみたところ、goal_states、task_statesのデータが削除されていることがわかりました。

テスト実行中はマスタデータを維持したいのですが、どのように設定すればよろしいでしょうか?

コード

spec/system/tasks_spec.rb

1require 'rails_helper' 2 3RSpec.describe "Tasks", type: :system, js: true do 4 let(:user) { FactoryBot.create(:user) } 5 let!(:goal) { FactoryBot.create(:goal) } 6 7 #切り分けのために同じテストを2回実行しています 8 scenario "ユーザーはタスクを作成できる" do 9 sign_in_as goal.user 10 click_link goal.content 11 click_on "編集" 12 click_on "+課題を追加" 13 fill_in "task-content", with: "task content" 14 fill_in "task-action", with: "task action" 15 click_on "作成" 16 expect(page).to have_content "task content" 17 end 18 19 scenario "ユーザーはタスクを作成できる" do 20 #上記のテストと同じ 21 end 22end

feature specの時は下記でgoal_states,task_statesを消去しないように設定していた

spec/rails_helper.rb

1 config.before(:suite) do 2 DatabaseCleaner.strategy = :truncation 3 load Rails.root.join('db', 'seeds.rb') 4 DatabaseCleaner.clean_with :truncation, { except: %w(goal_states task_states) } 5 end

下記ファイルをテスト環境で実行すればdb/seeds/test.rbが動きます

db/seeds.rb

1load(Rails.root.join('db', 'seeds', "#{Rails.env.downcase}.rb"))

各モデルに登録しているマスタデータ

db/seeds/test.rb

1GoalState.create(state: '予定') 2GoalState.create(state: '実施中') 3GoalState.create(state: '達成') 4GoalState.create(state: '達成ならず') 5TaskState.create(state: '予定') 6TaskState.create(state: '実施中') 7TaskState.create(state: '完了')

実行結果

同じテストを2回実行した結果、1回目はOK、2回目はNGになります

root@46278f09c5f5:/goal_manager# rspec ./spec/system/tasks_spec.rb 2022-01-28 12:40:03 WARN Selenium [DEPRECATION] Selenium::WebDriver::Chrome#driver_path= is deprecated. Use Selenium::WebDriver::Chrome::Service#driver_path= instead. Tasks Capybara starting Puma... * Version 3.12.6 , codename: Llamas in Pajamas * Min threads: 0, max threads: 4 * Listening on tcp://web:39197 ユーザーはタスクを作成できる 2022-01-28 12:40:13 +0000: Rack app error handling request { GET /goals/1 } #<ActiveRecord::RecordNotFound: Couldn't find GoalState with 'id'=1> /usr/local/bundle/gems/activerecord-5.2.5/lib/active_record/core.rb:177:in `find' /goal_manager/app/controllers/goals_controller.rb:13:in `show' /usr/local/bundle/gems/actionpack-5.2.5/lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action' 略 /usr/local/bundle/gems/puma-3.12.6/lib/puma/thread_pool.rb:135:in `block in spawn_thread' ユーザーはタスクを作成できる (FAILED - 1) Failures: 1) Tasks ユーザーはタスクを作成できる Failure/Error: @result = GoalState.find(@goal.result).state ActiveRecord::RecordNotFound: Couldn't find GoalState with 'id'=1 [Screenshot]: tmp/screenshots/failures_r_spec_example_groups_tasks_ユーザーはタスクを作成できる_126.png # ./app/controllers/goals_controller.rb:13:in `show'   略 # /usr/local/bundle/gems/puma-3.12.6/lib/puma/thread_pool.rb:135:in `block in spawn_thread' # ------------------ # --- Caused by: --- # Capybara::ElementNotFound: # Unable to find link or button "編集" # /usr/local/bundle/gems/capybara-3.35.3/lib/capybara/node/finders.rb:303:in `block in synced_resolve' Finished in 12.34 seconds (files took 3 seconds to load) 2 examples, 1 failure Failed examples: rspec ./spec/system/tasks_spec.rb:18 # Tasks ユーザーはタスクを作成できる

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

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

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

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

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

guest

回答1

0

自己解決

seed-fuを使用してマスタデータを使用するように変更したら解決しました。

投稿2022/01/30 13:17

genki0126

総合スコア33

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問