2013-04-01 2 views
1

Это мой RSpec код: -как проверить/тестовое конкретное поле в формате JSON с помощью RSpec

it "which has max value" do 
    get :index, Devise.token_authentication_key => @user.authentication_token, business_id: @business.id, max: '1' 
    expect(request.flash[:alert]).to eq(nil) 
    expect(response.body).to eq([@location].to_json(LocationFinder::API_PARAMS.merge(:root => false))) 
    end 

и тестирование результата IS-

ожидается: "[{\" адрес \ ": \" 1120 Млечный Путь \», \ "business_id \": 1, \ "город \": \ "Купертино]"

got: "[{\"address\":\"1120 Milky Way\",\"business_id\":1,\"city\":\"Cupertino,\"distance\":260.33452958767384,]" 

Здесь Расстояние дополнительное поле, как я могу проверить определенные поля или если оно невозможно, как устранить поле «расстояние», которое не проверяется rspec.

ответ

3

Вы можете проверить отдельные поля, используя что-то вроде:

# get the first entry in the JSON array 
json_response = JSON.parse(response.body).first 

# compare each field 
expect(json_response['address']).to eq(@location.address) 
expect(json_response['business_id']).to eq(@location.business_id) 
expect(json_response['city']).to eq(@location.city) 

Конечно, вам может понадобиться, чтобы настроить точные методы вы называете @location в зависимости от реализации, но это суть его.

Смежные вопросы