如何使用自定义URL测试RSpec控制器

时间:2015-08-26 15:48:22

标签: rspec

我试图测试我的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"}}

我在这里做错了什么?

2 个答案:

答案 0 :(得分:2)

方法getpostGuide to Testing Rails Applications"针对您的控制器的功能测试"中进行了描述。他们采取这些论点:

  
      
  • 您要求的控制器的操作。这可以是字符串或符号的形式。
  •   
  • 要传递给操作的请求参数的可选哈希值(例如,查询字符串参数或文章变量)。
  •   
  • 与请求一起传递的会话变量的可选哈希值。
  •   
  • 闪存值的可选散列。
  •   

paramssession是单独的哈希值,例如:

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

希望这有帮助。