Geocoder Gem тестирование IP-запроса

Я хочу проверить следующую строку на мой взгляд:

приложение / просмотров / продукты /index.html.erb

<%= render @products %>

приложение / просмотров / продукты /_product.html.erb

<td><%= distance_between(@current_location, product.location) %></td>

@products а также @current_location определены в связанном контроллере:

def index
  @products = Product.all
end

А также:

unless @current_location
  if !current_user.nil?
    @current_location = current_user.location
  else
    @current_location = request.location
  end
end

distance_between Метод определяется в помощнике местоположения:

def distance_between(here, there)
  t('location.distance.kilometre', count: here.distance_to(there, :km).round(1)) 
end

Итак, мой тест:

let(:current_location) { request.location }
it { should have_selector('td', text: distance_between(product.location, current_location))}

И сообщение об ошибке:

 Failure/Error: it { should have_selector('td', text: distance_between(product.location, current_location))}
 NoMethodError:
   undefined method `location' for nil:NilClass
 Shared Example Group: "product's informations" called from ./spec/requests/product_index_page_spec.rb:119
 # ./spec/requests/product_index_page_spec.rb:118:in `block (4 levels) in <top (required)>'
 # ./spec/support/products/index.rb:31:in `block (2 levels) in <top (required)>'

В процессе производства geocoder gem может запрашивать IP-адрес пользователя и отображать его местоположение с помощью request.location, но я не знаю, как это сделать в среде тестирования или разработки. Можете ли вы помочь мне исправить мой код?

0 ответов

Другие вопросы по тегам