teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

タイトル変更

2019/07/06 01:16

投稿

runes224
runes224

スコア14

title CHANGED
@@ -1,1 +1,1 @@
1
- Rspecで「_path」メソッドが使用できない
1
+ 『Ruby on Rails 5 速習実践ガイド』のRSpecで「visit 〇〇_path」が使用できない
body CHANGED
File without changes

1

タイトル変更、ドキュメントの追加

2019/07/06 01:15

投稿

runes224
runes224

スコア14

title CHANGED
@@ -1,1 +1,1 @@
1
- Rails.application.routes.url_helpers読み込めない
1
+ Rspecで「_path」メソッド使用できない
body CHANGED
@@ -1,17 +1,21 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
3
  現場で使えるRubyonRails5速習実践ガイドをDocker環境で学習しています。
4
+ Rspecでの検証において、`visit task_path(task_a)`でエラーが出ました。
4
5
 
5
- 以下の通り「_path」メソッドでエラーが発生しました。
6
- `NameError:undefined local variable or method 'task_a' for #<RSpec::ExampleGroups::Nested::Nested_2::A:0x000055f5b4270a60>`
7
6
 
7
+ ```
8
- 調べてみると、spec_helper.rbに以下を追加すると解決するそうなのですが、`Rails.application.routes.url_helpers`が読み込めないというエラーが発生してしまいます。
8
+ NameError:undefined local variable or method 'task_a' for #<RSpec::ExampleGroups::Nested::Nested_2::A:0x000055f5b4270a60>
9
+ ```
9
10
 
11
+ 調べてみると、spec_helper.rbに以下を追加すると解決するそうなのですが、次は`Rails.application.routes.url_helpers`が読み込めないというエラーが発生してしまいます。
12
+
10
13
  ```
11
14
  RSpec.configure do |config|
12
15
  config.include Rails.application.routes.url_helpers
13
16
  end
14
17
  ```
18
+
15
19
  参考
16
20
  [stackoverflow「Rspec and named routes」](https://stackoverflow.com/questions/22741975/undefined-local-variable-or-method-root-path)
17
21
 
@@ -41,6 +45,59 @@
41
45
 
42
46
  ### 該当のソースコード
43
47
 
48
+ spec/system/tasks_spec.rb
49
+ ```
50
+ require 'rails_helper'
51
+
52
+ describe 'タスク管理機能',type: :system do
53
+ describe '一覧表示機能' do
54
+ let(:user_a){ FactoryBot.create(:user, name: 'ユーザーA', email: 'a@example.com') }
55
+ let(:user_b){ FactoryBot.create(:user, name: 'ユーザーB', email: 'b@example.com') }
56
+ let!(:task_a){ FactoryBot.create(:task, name: '最初のタスク', user: user_a) }
57
+
58
+ before do
59
+ FactoryBot.create(:task, name: '最初のタスク', user: user_a)
60
+ visit login_path
61
+ fill_in 'メールアドレス', with: login_user.email
62
+ fill_in 'パスワード', with: login_user.password
63
+ click_button 'ログインする'
64
+ end
65
+
66
+ context 'ユーザーAがログインしているとき' do
67
+ let(:login_user) { user_a }
68
+
69
+ it 'ユーザーAが作成したタスクが表示される' do
70
+ expect(page).to have_content '最初のタスク'
71
+ end
72
+ end
73
+
74
+ context 'ユーザーBがログインしているとき' do
75
+ let(:login_user) { user_b }
76
+
77
+ it 'ユーザーAが作成したタスクが表示されない' do
78
+ # ユーザーAが作成したタスクが画面上に表示されないことを確認
79
+ expect(page).not_to have_content '最初のタスク'
80
+ end
81
+ end
82
+ end
83
+
84
+ describe '詳細表示機能' do
85
+ context 'ユーザーAがログインしているとき' do
86
+ let(:login_user) { user_a }
87
+
88
+ before do
89
+ visit task_path(task_a)
90
+ end
91
+
92
+ it 'ユーザーAが作成したタスクが表示される' do
93
+ expect(page).to have_content '最初のタスク'
94
+ end
95
+ end
96
+ end
97
+ end
98
+
99
+ ```
100
+
44
101
  spec/spec_helper.rb
45
102
  ```ruby
46
103
  require 'capybara/rspec'