ruby-on-rails - Rspec Rails - 在请求规范中模拟远程请求
问题描述
我的问题是在 Rspec 请求规范中模拟 IP。我想模拟来自远程(非本地主机)请求的请求。这是为了测试一些路由约束。
到目前为止,这是我的规格:
require 'rails_helper'
RSpec.describe 'AdminWhitelistBlocked', type: :request do
before :each do
RSpec.configure do |config|
config.before(:each, allow_rescue: true) do
Rails.application.config.action_dispatch.stub(:show_exceptions) { true }
Rails.application.config.stub(:consider_all_requests_local) { false }
end
end
end
it 'Allow local access access to the active admin area' do
get '/admin/login'
expect(request.remote_ip).to eq('0.0.0.0')
expect(request.headers['REMOTE_ADDR']).to eq('0.0.0.0')
expect(response).to have_http_status(:not_found)
end
end
我希望远程 IP 不是本地主机。
Failures:
1) AdminWhitelistBlocked Allow local access access to the active admin area
Failure/Error: expect(request.remote_ip).to eq('0.0.0.0')
expected: "0.0.0.0"
got: "127.0.0.1"
(compared using ==)
更新:
我也尝试过预先设置请求的远程地址:
require 'rails_helper'
RSpec.describe 'AdminWhitelistBlocked', type: :request do
before :each do
RSpec.configure do |config|
config.before(:each, allow_rescue: true) do
@request.remote_addr = '0.0.0.0'
end
end
end
it 'Allow local access access to the active admin area' do
get '/admin/login'
expect(request.remote_addr).to eq('0.0.0.0')
expect(request.headers['REMOTE_ADDR']).to eq('0.0.0.0')
expect(response).to have_http_status(:not_found)
end
end
但是,仍然没有成功:
Failures:
1) AdminWhitelistBlocked Allow local access access to the active admin area
Failure/Error: expect(request.remote_addr).to eq('0.0.0.0')
expected: "0.0.0.0"
got: "127.0.0.1"
(compared using ==)
解决方案
require 'rails_helper'
RSpec.describe 'AdminWhitelistAccess', type: :request do
it 'Allow local access access to the active admin area' do
get '/admin/login'
expect(request.remote_addr).to eq('127.0.0.1')
expect(request.headers['REMOTE_ADDR']).to eq('127.0.0.1')
expect(response).to have_http_status(:ok)
end
end
RSpec.describe 'AdminWhitelistBlocked', type: :request do
before :each do
allow_any_instance_of(ActionDispatch::Request).to receive(:remote_addr).and_return('0.0.0.0')
end
it 'Allow local access access to the active admin area' do
expect { get '/admin/login' }.to raise_error(ActionController::RoutingError)
end
end
推荐阅读
- javascript - react-select error 未捕获错误:元素类型无效
- spring-boot - Salesforce REST api 使用带有 Spring WebClient 的反应器
- javascript - 如何删除 React Hooks / Redux 应用程序中的特定列表项?
- php - include in $ 如何在代码中嵌入 include?
- java - Java中的Sqlite“数据库锁定”错误以及如何更新TableView
- javascript - 如何将图像放置在正方形画布内?
- visual-c++ - VS 2019 无网络远程调试?
- python-3.x - 在行标签上对数据框中的值求和
- javascript - 使用 setTimeOut 和 Promise 等待来自异步函数的值
- python - RuntimeError:输入必须有 3 个维度,得到 2