質問編集履歴

3

誤植修正

2020/01/09 08:53

投稿

lolohacker
lolohacker

スコア31

test CHANGED
File without changes
test CHANGED
@@ -128,6 +128,6 @@
128
128
 
129
129
  #追記
130
130
 
131
- 2019/1/9 17:40
131
+ 2020/1/9 17:40
132
132
 
133
133
  結構複雑な問題かと思いきや、post :create の実行時にアクションの最後でリダイレクトしていて、そのリダイレクト先のURLの :ap パラメタが設定されていないようでエラーが出ているっぽそう

2

状況の追記

2020/01/09 08:53

投稿

lolohacker
lolohacker

スコア31

test CHANGED
File without changes
test CHANGED
@@ -123,3 +123,11 @@
123
123
  Rails 5.1.6.2
124
124
 
125
125
  RSpec 3.9
126
+
127
+
128
+
129
+ #追記
130
+
131
+ 2019/1/9 17:40
132
+
133
+ 結構複雑な問題かと思いきや、post :create の実行時にアクションの最後でリダイレクトしていて、そのリダイレクト先のURLの :ap パラメタが設定されていないようでエラーが出ているっぽそう

1

ソース追加

2020/01/09 08:42

投稿

lolohacker
lolohacker

スコア31

test CHANGED
@@ -1 +1 @@
1
- rails rspec エンジンの単体テストでテスト結果がActionController::UrlGenerationError: No route matches となってしまう
1
+ rails5 rspec エンジンの単体テストでテスト結果がActionController::UrlGenerationError: No route matches となってしまう
test CHANGED
@@ -1,4 +1,6 @@
1
+ #概要
2
+
1
- 標題の通りの問題が発生しています。
3
+ 標題の問題が発生しています。
2
4
 
3
5
 
4
6
 
@@ -31,3 +33,93 @@
31
33
 
32
34
 
33
35
  ご存知の方、いらっしゃいましたらご教示お願い致します。
36
+
37
+
38
+
39
+ そもそも解決方法は別にあるという場合もご指摘いただけると助かります。
40
+
41
+ #現在の状況
42
+
43
+ ###試したこと
44
+
45
+ ・下記のソースの状態でテストを実行すると「ActionController::UrlGenerationError: No route matches {}, missing required keys: [:ap]」というエラーが出力される
46
+
47
+ ・ホストアプリ側のroute.rbの「scope "/:ap" do」の部分を「scope "/TEST" do」に変更するとテストはパスする
48
+
49
+ ###ソース
50
+
51
+ ホストアプリ側で作成したspec sessions_controller_spec.rb
52
+
53
+ ```Ruby
54
+
55
+ require "rails_helper"
56
+
57
+ RSpec.describe MyEngine::SessionsController, type: :controller do
58
+
59
+ routes { MyEngine::Engine.routes }
60
+
61
+
62
+
63
+ describe "POST sessions#create" do
64
+
65
+ before do
66
+
67
+ post :create, params: { user_id: "test_user", password: "test_user", ap: "TEST" }
68
+
69
+ end
70
+
71
+
72
+
73
+ it "redirect successfully" do
74
+
75
+ expect(response).to redirect_to top_path
76
+
77
+ end
78
+
79
+ end
80
+
81
+ end
82
+
83
+ ```
84
+
85
+ ホストアプリ側のroute.rb
86
+
87
+ ```Ruby
88
+
89
+ Rails.application.routes.draw do
90
+
91
+ scope "/:ap" do
92
+
93
+ mount MyEngine::Engine, at: "/my_engine", as: :my_engine
94
+
95
+ end
96
+
97
+ end
98
+
99
+ ```
100
+
101
+ エンジン側のroute.rb
102
+
103
+ ```Ruby
104
+
105
+ MyEngine::Engine.routes.draw do
106
+
107
+ get "login", to: "sessions#new", as: :login
108
+
109
+ post "login", to: "sessions#create"
110
+
111
+ get "/top/index", to: "top#index", as: :top
112
+
113
+ end
114
+
115
+ ```
116
+
117
+
118
+
119
+ #バージョン情報
120
+
121
+ ruby 2.6.2p47
122
+
123
+ Rails 5.1.6.2
124
+
125
+ RSpec 3.9