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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

2852閲覧

現場で使えるRuby on Rails速習実践ガイド RSpecのlet共通化でテストが通らない

yuriko

総合スコア15

Ruby

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

Ruby on Rails

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

0グッド

1クリップ

投稿2019/03/05 02:50

letを使用した共通化がテキスト通りに打ってもテストが通りません。
ユーザーAが作ったタスクをユーザーBが見れないテストなのですが、見れてしまうようです。

require 'rails_helper' describe 'タスク管理機能' ,type: :system do describe '一覧表示機能' do let(:user_a) { FactoryBot.create(:user, name: 'ユーザーA', email: 'a@example.com')} let(:user_b) { FactoryBot.create(:user, name: 'ユーザーB', email: 'b@example.com')} before do FactoryBot.create(:task, name: '最初のタスク', user: user_a) visit login_path fill_in 'メールアドレス', with: 'a@example.com' fill_in 'パスワード', with: 'password' click_button 'ログインする' end context 'ユーザーAがログインしている時' do let(:login_user) { user_a } it 'ユーザーAが作成したタスクが表示される' do expect(page).to have_content '最初のタスク' end end context 'ユーザーBがログインしている時' do let(:login_user) { user_b } it 'ユーザAが作成したタスクが表示されない' do expect(page).to have_no_content '最初のタスク' end end end end
Failures: 1) タスク管理機能 一覧表示機能 ユーザーHがログインしている時 ユーザDが作成したタスクが表示されない Failure/Error: expect(page).to have_no_content '最初のタスク' expected not to find text "最初のタスク" in "Taskleaf\nタスク一覧\nログアウト\nログインしました\nタスク一覧\n新規登録\n名称 登録日時\n最初のタスク 2019-03-05 02:39:31 UTC 編集削除" [Screenshot]: tmp/screenshots/failures_r_spec_example_groups_nested_nested_h_ユーザdが作成したタスクが表示されない_308.png # ./spec/system/tasks_spec.rb:27:in `block (4 levels) in <top (required)>' Finished in 8.03 seconds (files took 5.41 seconds to load) 2 examples, 1 failure Failed examples: rspec ./spec/system/tasks_spec.rb:26 # タスク管理機能 一覧表示機能 ユーザーHがログインしている時 ユーザDが作成したタスクが表示されない

ご教授お願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

その書籍を持ってないのですが

fill_in 'メールアドレス', with: 'a@example.com'
fill_in 'パスワード', with: 'password'

が気になります。

実際、サポートサイトからチャプター5完成形を覗いてみると違っています。

投稿2019/03/05 03:16

asm

総合スコア15147

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

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

yuriko

2019/03/05 07:28

サポートセンターまで見ていただきましてありがとうございます。 実は、サポートサイトではそのチャプターごとの"最終形"が見れるだけであり、その道のりは見れないのです。 共通化する前のコードはこちらで、パスします。 なので、fill_in の箇所は問題ないと思っております。 ``` require 'rails_helper' describe 'タスク管理機能' ,type: :system do describe '一覧表示機能' do before do user_a = FactoryBot.create(:user, name: 'ユーザーA', email: 'a@example.com') FactoryBot.create(:task, name: '最初のタスク', user: user_a) end context 'ユーザーAがログインしている時' do before do visit login_path fill_in 'メールアドレス', with: 'a@example.com' fill_in 'パスワード', with: 'password' click_button 'ログインする' end end context 'ユーザーBがログインしている時' do before do FactoryBot.create(:user, name: 'ユーザーB', email: 'b@example.com') visit login_path fill_in 'メールアドレス', with: 'b@example.com' fill_in 'パスワード', with: 'password' click_button 'ログインする' end it 'ユーザーAが作成したタスクが表示されない' do expect(page).to have_no_content '最初のタスク' end end end end ``` もし再度お気付きの点がございましたらよろしくお願いいたします。
asm

2019/03/05 07:39 編集

ですからfill_in 'メールアドレス'に注目してAでログインする場合とBでログインする場合を見比べ そして、共通化した後を見てください。 ユーザーAでしかログインできていません。 これがあなたが共通化する際に失敗したのか それとも、テキスト通りで失敗した理由などを説明する文章が後にあるのか は知りませんが 完成形では、きちんとログインユーザーをcontext毎に振り分けられています。
yuriko

2019/03/06 05:55

どうもありがとうございました。 仰る通りの箇所の私の確認ミスでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問