【发布时间】:2014-04-29 20:47:34
【问题描述】:
minitest/minitest-rails 出现以下“无路由匹配”错误:
1) Error:
SessionsController::#create#test_0002_get authenticated user session:
ActionController::UrlGenerationError: No route matches {:action=>"create", :controller=>"sessions"}
test/controllers/sessions_controller_test.rb:30:in `block (3 levels) in <top (required)>'
但其他 get :new 和 get :destroy 路线都很好。这是 test/controllers/sessions_controller_test.rb
require "test_helper"
describe SessionsController do
describe "#new" do
it "GET, /signin" do
get :new
assert_response 302
end
it "GET, /auth/github" do
get :new
assert_redirected_to '/auth/github'
end
end
describe "#create" do
specify { request.env["omniauth.auth"] = OmniAuth.config.mock_auth[:github] }
it "get authenticated user session" do
--> get :create
...
end
end
describe "#destroy" do
it "GET, /signout and reset_session" do
get :destroy
session[:user_id].must_equal nil
end
it "GET, / by redirect_to root_url" do
get :destroy
assert_response 302
assert_redirected_to root_path
end
end
end
这是控制器:
class SessionsController < ApplicationController
def new
redirect_to '/auth/github'
end
def create
auth = request.env["omniauth.auth"]
user = User.where(:token => auth['credentials']['token']).first ||
User.create_with_omniauth(auth)
reset_session
session[:user_id] = user.id.to_s
end
def destroy
reset_session
redirect_to root_url, :notice => 'Signed out!'
end
end
路线:
$ rake routes|grep session
auth_github_callback GET /auth/:provider/callback(.:format) sessions#create
signin GET /signin(.:format) sessions#new
signout GET /signout(.:format) sessions#destroy
$ grep session config/routes.rb:
get '/auth/:provider/callback' => 'sessions#create', :as => :auth_github_callback
get '/signin' => 'sessions#new', :as => :signin
get '/signout' => 'sessions#destroy', :as => :signout
从 Gemfile.lock 中提取 minitest 相关性:
minitest (~> 5.1)
minitest (5.3.3)
minitest-capybara (0.6.1)
minitest (~> 5.0)
minitest-metadata (0.5.0)
minitest (>= 4.7, < 6.0)
minitest-rails (2.0.1)
minitest (>= 5.3.3, < 6.0)
minitest-rails-capybara (2.0.0)
minitest-capybara (~> 0.6.1)
minitest-metadata (~> 0.5.0)
minitest-rails (~> 2.0.0)
minitest-rails-capybara
应用程序在 Rails 4.1.0 / ruby 2.1.1p76 上运行。
应用程序在开发中运行良好,这让我觉得测试路由出了点问题,有些路由很好,只是创建失败。
直到现在,我都不知道在哪里看。
【问题讨论】:
标签: ruby-on-rails ruby testing tdd minitest