質問編集履歴
2
タイトル変更
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
|
1
|
+
『Ruby on Rails 5 速習実践ガイド』のRSpecで「visit 〇〇_path」が使用できない
|
body
CHANGED
File without changes
|
1
タイトル変更、ドキュメントの追加
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
|
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
|
-
|
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'
|