I am developing application where using Rails 4
. I am just starting writing test cases but got issue in login API test case using rSpec and capybara
.
Below is controller file of 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
It is run success using get method in POSTMAN
I coded for it in test cases below:
------------------------ 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
I got error below:
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)>'
Credential which i used in api that i use for login in site and its success.
What is wrong.. that i can't found.
Any one experience.
You need to create a user before signing him. If you use FactoryGirls gem it will be something like this
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
i added one method which register user first because of test cases use test database and its blank every time. So i can't found user data thats why need to create user first.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.