Ruby on rails 如何使用rspec登录设备

Ruby on rails 如何使用rspec登录设备,ruby-on-rails,rspec,devise,Ruby On Rails,Rspec,Devise,这是我的rspec文件 it "assigns all tool_cvt_remote_focus as @tool_cvt_remote_focus" do post "/users/sign_in", {:username => 'user', :password => "test"} end 耙道 users/sessions#new {:locale=>"jp"} new_user_session_en GET /users/s

这是我的rspec文件

    it "assigns all tool_cvt_remote_focus as @tool_cvt_remote_focus" do
      post "/users/sign_in", {:username => 'user', :password => "test"}
    end
耙道

   users/sessions#new {:locale=>"jp"} new_user_session_en GET    /users/sign_in(.:format)
控制台上使用POST方法时出错

 Failure/Error: post "/users/sign_in", {:user => 123}
 ActionController::UrlGenerationError:
   No route matches {:action=>"/users/sign_in", :controller=>"users", :user=>"123"}
GET方法的错误

 Failure/Error: get "/users/sign_in", {:username => 'user', :password => "test"}

好的,我用Desive和Rspec做了一些研究,让你的测试工作正常,尽管进行了一些重构

我要做的是使用Desive helpers,为此我必须将该功能添加到我的spec_helper文件中:

require 'devise'

RSpec.configure do |config|
  config.include Devise::TestHelpers, :type => :controller
end
然后,我不得不重构您的测试以使用这些新的designe助手方法,否则designe会给我一个尝试跳过路由器的错误

require 'rails_helper'

RSpec.describe Devise::SessionsController, :type => :controller do
 it "assigns all tool_cvt_remote_focus as @tool_cvt_remote_focus" do
    @request.env["devise.mapping"] = Devise.mappings[:user]
    user = User.create(
      username: 'user',
      password: 'test'
    )
    sign_in :user, user
  end
end

现在,我创建用户的方式不是最佳实践。从我在网上可以告诉你的,你应该使用FactoryGirl来创建用户,因为它不那么脆弱。但是,由于我从未使用过FactoryGirl,只是想为您提供尽可能最简单的解决方案,因此我决定不包括它。

路由文件是什么样子的?您的rake:routes说它需要GET请求,但您正在通过测试发出POST请求。“这可能是你的问题吗?”托马索我试过获取请求,也没有运气