Rails 5, как написать функциональный тест контроллера API для действия создания сеанса - PullRequest
0 голосов
/ 02 апреля 2019

Я пишу функциональный тест для действия создания контроллера сеанса API.Вот мой код, который я запускаю:

Это мой API session_controller.rb

class Api::V2::Users::SessionsController < Api::V2::BaseController

    prepend_before_action :allow_params_authentication!, only: :create
    skip_before_action :authenticate_user!, only: :create

    def create
      resource = warden.authenticate!(scope: :user)
      sign_in(:user, resource)
      yield resource if block_given?
      render json: {access_token: current_token, user: resource}
    end


    def destroy
       signed_out = (Devise.sign_out_all_scopes ? sign_out : 
       sign_out(resource_name))
       yield if block_given?
       head :no_content
    end

    private

    def current_token
         request.env['warden-jwt_auth.token']
    end
end

, и это мой sessions_controller_test.rb

require 'test_helper'
require 'devise/jwt/test_helpers'

//controller_test
class SessionsControllerTest < ActionDispatch::IntegrationTest

   token = Knock::AuthToken.new(payload: { sub: user.id }).token
   token = { 'Authorization': "Bearer #{token}" }


    URL = '/v2/users?me=true'
    AUTH_URL = '/user_token'
    describe 'GET /users?me=true' do
        it 'should return the user info' do
            user  = create(:user)
            get URL, headers: authenticated_header(user)
            puts response.body
        end
    end

    describe "aunauthorised user" do
        it 'should return unauth for retrieve current user info before 
            login' do
                get URL
                expect(response).to have_http_status(:unauthorized)
            end
        end
    end

Мне нужнозапустить тест, как если пользователь успешно создан, показать сообщение об успехе.Я ожидаю, что он генерирует токен при успешном создании пользователя.

1 Ответ

0 голосов
/ 04 апреля 2019

Первое: обычно хорошей практикой является тестирование только одной вещи в каждом it блоке. Таким образом, легче проверить, что вы рассмотрели конкретные сценарии, а также выполнить разбор и настроить тесты.

Я полагаю, что вы могли бы извлечь выгоду из чего-то вроде этого:

let(:action) { post url, params: params }
let(:url) { "/users" } # change this to correct path matching your router
let(:params) {
  {
    username: "username1",
    password: "secret-password",
  },
}

it "generates user token" do 
  expect { action }.to change { user.tokens.count }.by(1)
end

it "returns the access token" do
  action
  expect(response.body).to include(user.tokens.last)
end

it "returns the user information" do 
  action
  expect(response.body).to include user.to_json
end

Надеюсь, это поможет.

Best

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...