Я использовал 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