繁体   English   中英

在Rails 4中使用rSpec在api测试用例中出错

[英]Got error in api test case using rSpec in Rails 4

我正在开发使用Rails 4应用程序。 我只是开始编写测试用例,但是使用rSpec and capybara在登录API测试用例中遇到了问题。

下面是API控制器文件

---------------------- app/controllers/api/users_controller.rb --------------

class Api::UsersController < Api::ApiController
  before_action :set_user_api, except: [:login] 

  api :GET, '/api/users/login', "Get user token using credentials"
  param :email, String, "User email", :required => true
  param :password, String, "User password", :required => true
  def login
    @user= User.find_by_email(params[:email])
    if @user != nil && @user.authenticate(params[:password])
      if @user.token == nil
        @user.generate_token
        @user.save!
      end
      render action: 'withKey'
    else
      error(401, 401, "Could not authenticate user")
    end
  end
end

使用POSTMAN中的get方法成功运行

我在下面的测试案例中对此进行了编码:

------------------------ spec/helpers/api/users_helper_spce.rb ----------------

require 'spec_helper'

RSpec.describe Api::UsersHelper, :type => :request do

    describe "Test Login Api" do
       it "Login Api" do
        params = {
                :email => "two@gmail.com",
                :password => "12345678"
        }

        get "/api/users/login", params
        # puts response.inspect
        expect(response.status).to eq(200)
       end
    end
end

我在下面出现错误:

  1) Api::UsersHelper Test Login Api Login Api
     Failure/Error: expect(response.status).to eq(200)

       expected: 200
            got: 401

       (compared using ==)
     # ./spec/helpers/api/users_helper_spec.rb:24:in `block (3 levels) in <top (required)>'

我在用于登录网站及其成功的api中使用的凭据。

怎么了..我找不到。

任何一个经验。

您需要在创建用户之前对其进行签名。 如果您使用FactoryGirls宝石,它将是这样的

let(:user) {Factory(:user, email: "two@gmail.com", password: "12345678")}
describe "Test Login Api" do
  before { user }
  it "Login Api" do
    ...
RSpec.describe Api::UsersHelper, :type => :request do   
    describe "Test Login Api" do
           it "Login Api" do
            params = {
                       :email => "abc@gmail.com",
                       :password => "12345678"
               }

               create_user("abc", "xyz", params[:email], params[:password])
               get "/api/users/login", params
               expect(response.status).to eq(200)
           end
    end
end

我添加了一种方法,该方法首先注册用户,因为测试用例每次都要使用测试数据库,并且每次使用空白。 所以我找不到用户数据,这就是为什么需要先创建用户。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM