我试图测试我的SessionsCotroller
,并写了以下内容:
describe "POST create session" do
it "should create a new session" do
params = { session: { email: 'email@example.com', password: 'foobar' } }
post '/api/signin', params
response['success'] == true
end
...
end
我收到以下错误:
Failure/Error: post '/api/signin', params
ActionController::UrlGenerationError:
No route matches {:action=>"/api/signin", :controller=>"sessions", :session=>{:email=>"email@example.com", :password=>"foobar"}}
我在这里做错了什么?
答案 0 :(得分:2)
方法get
和post
在Guide to Testing Rails Applications"针对您的控制器的功能测试"中进行了描述。他们采取这些论点:
- 您要求的控制器的操作。这可以是字符串或符号的形式。
- 要传递给操作的请求参数的可选哈希值(例如,查询字符串参数或文章变量)。
- 与请求一起传递的会话变量的可选哈希值。
- 闪存值的可选散列。
params
和session
是单独的哈希值,例如:
session = {token: "string"}
params = {thing_id: "123"}
post :action, params, session
答案 1 :(得分:1)
将请求规范用于此目的
规格/请求/ api_v1_spec.rb
require "rails_helper"
RSpec.describe "Create Session", :type => :request do
describe "POST create session" do
it "should create a new session" do
params = { session: { email: 'email@example.com',password:'foobar' } }
post '/api/signin', params
response['success'] == true
end
end
end
希望这有帮助。