RSpe c undefined метод `каждый 'в вызове - PullRequest
0 голосов
/ 19 июня 2020

В моем API Grape у меня есть конечная точка, которая отвечает за получение данных от веб-перехватчика CMS - она ​​работает хорошо, но спецификации ниже не соответствуют требованиям:

describe ::Webhooks::Cms::ReceiveWebhook, type: :request do
  subject(:call) { post endpoint, params: params, headers: basic_authorized_headers(auth_params) }

  let(:endpoint) { 'webhooks/Cms' }
  let(:params) { { some: 'params' } }
  let(:auth_params) do
    {
      username: Rails.application.credentials.cms_user,
      password: Rails.application.credentials.cms_password,
    }
  end

  it 'returns a successful response' do
    call
    expect(response).to be_successful
  end
end

помощник с методом basic_authorized_headers из заголовков:

module AuthRequestHelpers
  def basic_authorized_headers(username: nil, password: nil)
    "#{username}:#{password}"
  end
end

Я получаю сообщение об ошибке:

 Failure/Error: subject(:call) { post endpoint, params: params, headers: basic_authorized_headers(auth_params) }

 NoMethodError:
   undefined method `each' for "test@test.com:password":String

Вот мой контроллер:

module Cms
  class ReceiveWebhook < Base
    desc 'Receive data of CRUD actions from CMS webhook'

    http_basic do |user, password|
      user == Rails.application.credentials.cms_user &&
        password == Rails.application.credentials.cms_password
    end

    post :cms do
      status 200
    end
  end
end

1 Ответ

2 голосов
/ 19 июня 2020

post ожидает ha sh для параметра headers, вы передаете строку.

subject(:call) { post endpoint, params: params, headers: { 'Authorization' => basic_authorized_headers(auth_params) } }

Кроме того, обычно basi c auth требует ключевое слово «Basi c» и чтобы учетные данные были закодированы в Base64 :

module AuthRequestHelpers
  def basic_authorized_headers(username: nil, password: nil)
    encoded_credentials = Base64.encode64("#{username}:#{password}")
    "Basic #{encoded_credentials}"
  end
end
...