В моем контроллере rails я пытаюсь написать тест для метода search_backups
. Проблема, с которой я сталкиваюсь, заключается в том, что devices_ids_from_elastic = ConfigTextSearch.search search_term
ничего не возвращает, поэтому тестовые прогоны .map
на devices_ids_from_elastic
, который является неправильным #<String:0x007f8a90b67ca0>
.Rspec Stubbing Object.map()
Как исправить ошибку devices_ids_from_elastic.map()
, чтобы исправить эту проблему?
Failures:
1) ReportsController access control allows architects to search backups
Failure/Error: post 'search_backups'
NoMethodError:
undefined method `each_pair' for #<String:0x007f8a90b67ca0>
# ./app/controllers/reports_controller.rb:19:in `map'
# ./app/controllers/reports_controller.rb:19:in `elastic_mongo_lookup'
# ./app/controllers/reports_controller.rb:32:in `search_backups'
# ./spec/controllers/reports_controller_spec.rb:123:in `block (3 levels) in <top (required)>'
тест:
describe "controller method test" do
before do
allow(CSV).to receive(:generate).and_return("1234, blah")
stub_request(:get, "http://localhost:9200/mongo_index/config_files/_search?q=").
with(:headers => {'Expect'=>'', 'User-Agent'=>'Faraday v0.9.1'}).
to_return(:status => 200, :body => '{lots of json stuff in here }', :headers => {})
it "allows users to search backup log files" do
reports = double(ReportsController)
reports.stub(:map).and_return("help")
post 'search_backups'
end
контроллер:
search_backups
def elastic_mongo_lookup(search_term)
devices_ids_from_elastic = ConfigTextSearch.search search_term
device_ids = devices_ids_from_elastic.map { |device| device._source.device_id }
csv_string = CSV.generate do |csv|
Device.where(:_id.in => device_ids).each do |device|
csv << [device.logical_name, device.primary_ip]
end
end
return csv_string
end
def search_backups
authorize! :read, :custom_report
csv_string = elastic_mongo_lookup params[:search_term]
if csv_string.blank?
flash[:notice] = "No results were found"
redirect_to reports_path
else
render text: "DeviceID, primary_ip\n" + csv_string
end
end#search_backups
Почему вы не окурок Conf igTextSearch.search и заставить его возвращать пустой массив или массив желаемых объектов? – Hesham
Почему 'reports.stub (ConfigTextSearch.search) .with (" sss "). And_return ([" help "])' give me ArgumentError: неправильное количество аргументов (0 для 1..2) '? – dman