Rspec ruby ​​на рельсах: гем-хаверсин возвращает ноль-значение при записи модульного теста - PullRequest
0 голосов
/ 04 декабря 2018

Я использовал Rspec, чтобы протестировать метод, записанный для измерения расстояния между точками с гемом Haversine:

# GET /api/v1/angular/sites/:id/distances
  def stores_distances
    site     = Site.find params[ :id ]
    distances = Store.current.map do |store|
      {
        name: store.name,
        value: Haversine.distance(
                site.address.latitude,
                site.address.longitude,
                store.address.latitude,
                store.address.longitude
              ).round(2)
      }
    end

    render json: {
      distances: distances.to_json
    }
  end

Я хочу протестировать 2 случая: если метод возвращает статус 200, возвращает массив расстояний.

вот что я сделал:

describe " GET #stores_distances" do
    before :each do
      @site_address   = create :address, latitude: 48.85837009999999, longitude: 2.2944813000000295
      @store_address  = create :address, latitude: 48.8633604, longitude: 2.30189710000002
      @site    = create :site, address: @site_address
      @store   = create :store, address: @store_address

      get :stores_distances, params: { id: @site.id }
    end

    it "should return 200" do
      expect( response.status ).to be_ok
    end

    it "should return an array of distances" do
      expect( response.body ).to have_node(distances)
    end
end

Я получил эту ошибку:

Api :: V1 :: Angular :: SitesController GET #stores_distances должен возвращаться200 Ошибка / ошибка: значение: Haversine.distance (site.address.latitude, site.address.longitude, store.address.latitude, store.address.longitude) .round (2)

 TypeError:
   nil can't be coerced into Float

1 Ответ

0 голосов
/ 04 декабря 2018

Кажется, что в одном из магазинов есть nil лат или лонг.Убедитесь, что все магазины, возвращенные из Store.current, имеют инициализированные координаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...