Как передать заголовок и параметр с помощью тестового контроллера RSpe c - PullRequest
0 голосов
/ 23 марта 2020

Я хочу знать, как проверить контроллер (получить глагол) для новой конечной точки.

Contains 
  header =  [authorization: token] 
  URL    =  id: 1

  EndPoint : https://tes.test.net.br/api/users/login/1 

Пример: Test Controller

 RSpec.describe Api::ApplicationController, type: :controller do

  let(:token) {'xx'}
  let(:url) { 'https://test.test.net.br' }
  let(:user_id) {1}

  describe 'GET login_with_token' do

    context 'with valid user and token' do
      it 'return the token data' do

        get "/login/{user_id}", {}, {'Authorization': token }   (doubt)
        expect(response).to have_http_status(201)
        expect(response.content_type).to eq "application/json"
        expect(response[:subdomain]).to eq('test')
        expect(response[:url]).to eq(url_portal)
        expect(response[:token]).not_to be_nil
      end
    end

  end
end

1 Ответ

0 голосов
/ 23 марта 2020

В спецификации контроллера вы пишете get :method_name вместо пути. Это потому, что спецификации контроллера на самом деле не создают HTTP-запросов. Вместо этого они создают экземпляр вашего контроллера и передают ему поддельный запрос, а затем вы фактически вызываете метод на контроллере. Спецификации контроллера устарели.

То, что вы хотите, это запрос spe c:

 # spec/requests/logins_spec.rb
 RSpec.describe 'Logins', type: :request do

  let(:token) {'xx'}
  let(:url) { 'https://test.test.net.br' }
  let(:user_id) {1}

  describe 'GET login_with_token' do
    context 'with valid user and token' do
      it 'return the token data' do
        get "/login/#{user_id}", params: {}, headers: {'Authorization': token }
        expect(response).to have_http_status(201)
        expect(response.content_type).to eq "application/json"
        expect(response[:subdomain]).to eq('test')
        expect(response[:url]).to eq(url_portal)
        expect(response[:token]).not_to be_nil
      end
    end
  end
end
...