Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何编写请求规范来测试用户登录?_Ruby On Rails_Rspec - Fatal编程技术网

Ruby on rails 如何编写请求规范来测试用户登录?

Ruby on rails 如何编写请求规范来测试用户登录?,ruby-on-rails,rspec,Ruby On Rails,Rspec,我正试图编写一个规范来测试我的用户登录API,但在运行规范时,不断收到JSON电子邮件/密码错误401。我正在执行以下操作: require 'spec_helper' describe User do subject(:user) do Program.create!(name: 'test', gender: 'Female', goal_id: '1', experience_id: '1') User.create!(email: 'test@test.com',

我正试图编写一个规范来测试我的用户登录API,但在运行规范时,不断收到JSON电子邮件/密码错误
401
。我正在执行以下操作:

require 'spec_helper'

describe User do
  subject(:user) do
    Program.create!(name: 'test', gender: 'Female', goal_id: '1', experience_id: '1')
    User.create!(email: 'test@test.com', password: '12345678', password_confirmation: '12345678', goal_id: '1', experience_level_id: '1', gender: 'Female')
  end

  it "is logged in" do
    post "/api/v1/login", user_login: {email: 'test@test.com', password: '12345678' }
    response.status.should be(201)
  end
end
有什么想法吗

编辑1

这是我的sessions_控制器,当用户通过API登录时使用它

class Api::V1::SessionsController < Devise::SessionsController
    before_filter :authenticate_user!, except: [:create, :destroy]
    before_filter :ensure_params_exist
    skip_before_filter :verify_authenticity_token

  def create
    resource = User.find_for_database_authentication(email: params[:user_login][:email])
    return invalid_login_attempt unless resource

    if resource.valid_password?(params[:user_login][:password])
        sign_in("user", resource)
        resource.ensure_authentication_token!
        render 'api/v1/sessions/new.json.jbuilder', status: 201
        return
    end
    invalid_login_attempt
  end

  def destroy
        current_user.reset_authentication_token
        render json: {success: true}
  end

  protected

  def ensure_params_exist
    return unless params[:user_login].blank?
    render json: {success: false, message: "missing user_login parameter"}, status: 422
  end

  def invalid_login_attempt
    render 'api/v1/sessions/invalid.json.jbuilder', status: 401
  end
end
class Api::V1::SessionController
我离得很近,也许这就是我遇到这么多麻烦的原因。以下是我最后做的:

require 'spec_helper'

describe "sessions" do
  before do
    FactoryGirl.create(:program)
    @user = FactoryGirl.create(:user)
  end

  describe "user" do
    it "is logged in" do
  post "/api/v1/login", user_login: {email: @user.email, password: @user.password }

      response.status.should be(201)
    end
  end
end

我将
主题
块切换为
之前的
块,并将实例变量用于电子邮件和密码。就这样

如果你发布你的登录控制,这会有所帮助。我刚刚添加了它。谢谢!我会检查您的日志输出,确保它到达控制器操作,然后开始使用or
put
s查看您期望的参数是否实际进入。如何检查日志输出?服务器输出中没有发生任何事情