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

質問編集履歴

3

誤植修正

2020/01/09 08:53

投稿

lolohacker
lolohacker

スコア31

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

2

状況の追記

2020/01/09 08:53

投稿

lolohacker
lolohacker

スコア31

title CHANGED
File without changes
body CHANGED
@@ -60,4 +60,8 @@
60
60
  #バージョン情報
61
61
  ruby 2.6.2p47
62
62
  Rails 5.1.6.2
63
- RSpec 3.9
63
+ RSpec 3.9
64
+
65
+ #追記
66
+ 2019/1/9 17:40
67
+ 結構複雑な問題かと思いきや、post :create の実行時にアクションの最後でリダイレクトしていて、そのリダイレクト先のURLの :ap パラメタが設定されていないようでエラーが出ているっぽそう

1

ソース追加

2020/01/09 08:42

投稿

lolohacker
lolohacker

スコア31

title CHANGED
@@ -1,1 +1,1 @@
1
- rails rspec エンジンの単体テストでテスト結果がActionController::UrlGenerationError: No route matches となってしまう
1
+ rails5 rspec エンジンの単体テストでテスト結果がActionController::UrlGenerationError: No route matches となってしまう
body CHANGED
@@ -1,4 +1,5 @@
1
+ #概要
1
- 標題の通りの問題が発生しています。
2
+ 標題の問題が発生しています。
2
3
 
3
4
  [Rails4でEngineのcontroller specで必ずuse_routeする](https://qiita.com/k0kubun/items/47f4c0494e658d50862a)
4
5
  こちらの記事を拝見し、use_routeを使用すれば解決できると思いましたが、
@@ -14,4 +15,49 @@
14
15
 
15
16
  この部分の具体的な実装方法が分からないです。
16
17
 
17
- ご存知の方、いらっしゃいましたらご教示お願い致します。
18
+ ご存知の方、いらっしゃいましたらご教示お願い致します。
19
+
20
+ そもそも解決方法は別にあるという場合もご指摘いただけると助かります。
21
+ #現在の状況
22
+ ###試したこと
23
+ ・下記のソースの状態でテストを実行すると「ActionController::UrlGenerationError: No route matches {}, missing required keys: [:ap]」というエラーが出力される
24
+ ・ホストアプリ側のroute.rbの「scope "/:ap" do」の部分を「scope "/TEST" do」に変更するとテストはパスする
25
+ ###ソース
26
+ ホストアプリ側で作成したspec sessions_controller_spec.rb
27
+ ```Ruby
28
+ require "rails_helper"
29
+ RSpec.describe MyEngine::SessionsController, type: :controller do
30
+ routes { MyEngine::Engine.routes }
31
+
32
+ describe "POST sessions#create" do
33
+ before do
34
+ post :create, params: { user_id: "test_user", password: "test_user", ap: "TEST" }
35
+ end
36
+
37
+ it "redirect successfully" do
38
+ expect(response).to redirect_to top_path
39
+ end
40
+ end
41
+ end
42
+ ```
43
+ ホストアプリ側のroute.rb
44
+ ```Ruby
45
+ Rails.application.routes.draw do
46
+ scope "/:ap" do
47
+ mount MyEngine::Engine, at: "/my_engine", as: :my_engine
48
+ end
49
+ end
50
+ ```
51
+ エンジン側のroute.rb
52
+ ```Ruby
53
+ MyEngine::Engine.routes.draw do
54
+ get "login", to: "sessions#new", as: :login
55
+ post "login", to: "sessions#create"
56
+ get "/top/index", to: "top#index", as: :top
57
+ end
58
+ ```
59
+
60
+ #バージョン情報
61
+ ruby 2.6.2p47
62
+ Rails 5.1.6.2
63
+ RSpec 3.9