Разработчик теста не может войти в систему - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть приложение rails API, использующее devise_token_auth, и в моих тестах (minitest) мне нужно отправлять POST-запросы и входить в систему пользователей, поэтому я использовал метод sign_in, но, похоже, он ничего не делает.

Это мой тестовый файл

require 'test_helper'

class ActivityControllerTest < ActionDispatch::IntegrationTest
    include Devise::Test::IntegrationHelpers
    test "post activity" do
        sign_in users('one')
        post '/activity/', params: {
            original_activity_log_file: fixture_file_upload('files/test_gpx.gpx', 'application/gpx'),
            title: 'test activity',
            description: 'test description'
        }
        assert_response 200
    end
end

И это результат при запуске

Expected response to be a <200: OK>, but was a <401: Unauthorized>
Response body: {"errors":["You need to sign in or sign up before continuing."]}.
Expected: 200
  Actual: 401

Что здесь может произойти, чтобы вызвать сбой теста?

1 Ответ

0 голосов
/ 05 сентября 2018

Вы используете devise_token_auth, в этом случае помощники простого разработчика не работают, вам нужно выполнить простую авторизацию с пост-запросом. Вот пример :

# make a request in order to get tokens
post(
  api_user_session_path,
  params: {
    email: "foo@bar.com",
    password: "password"
  }.to_json,
  headers: {
    'Content-Type' => 'application/json',
    'Accept' => 'application/json'
  }
)
# fetch data from response
client = response.headers['client']
token = response.headers['access-token']
expiry = response.headers['expiry']
token_type = response.headers['token-type']  
uid = response.headers['uid']  
auth_params = {
  'access-token' => token,
  'client' => client,
  'uid' => uid,
  'expiry' => expiry,
  'token_type' => token_type
}
new_client = users('one')
get(
  api_find_client_by_name_path(new_client.name),
  headers: auth_params
)               
assert_response :ok
...