ruby-on-rails - 调用中的 RSpec 未定义方法“每个”
问题描述
在我的 Grape API 中,我有一个端点负责从 CMS webhook 接收数据 - 它运行良好,但以下规格失败:
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
解决方案
post
期望参数的哈希值headers
,您正在传递一个字符串。
subject(:call) { post endpoint, params: params, headers: { 'Authorization' => basic_authorized_headers(auth_params) } }
此外,通常基本身份验证需要“基本”关键字,并且凭据以 Base64 编码:
module AuthRequestHelpers
def basic_authorized_headers(username: nil, password: nil)
encoded_credentials = Base64.encode64("#{username}:#{password}")
"Basic #{encoded_credentials}"
end
end
推荐阅读
- c# - 非静态方法在连接两个表时需要一个目标
- qt - apt-get 在 bitbaking meta-toolchain-qt5 时返回 100
- javascript - PHP - 抓取 javascript 网站
- qt - 即使存在,也找不到或加载 Qt 平台插件“windows”
- jquery - 未捕获的 TypeError:无法读取 null 的属性“错误”
- magnolia - 如何在 Magnolia CMS 的资产应用程序中查看文件夹的标识符?
- javascript - 将 react-testing-library 添加到项目时遇到问题 - TypeError: Cannot read property 'then' of undefined
- c# - 具有嵌套接口的自定义 JsonConverter
- window - gtk/cairo:只显示自定义形状的绘图
- wordpress - Wordpress 如何获取当前的分类术语?