2015-08-21 5 views
2

Я пытаюсь использовать RSpec с драгоценным камнем Airborne, чтобы проверить значение поля в ответе JSON объектов «людей» из API.Как проверить значение одного поля в объекте JSON с RSpec

Код:

it 'GET list of people objects where gender = male' do 
    get "/people?gender=male" 
    expect_json('people.*', {gender: 'MALE'}) 
    end 

Так что, если мой тест делает вызов API с этим конкретным фильтром (пол), я ожидаю только тянуть обратно человек с пола мужского пола. Однако этот код не работает, потому что у каждого объекта «человек» есть много разных ключей (: имя, возраст и т. Д.). Я ТОЛЬКО хочу проверить пол, но я не могу заставить его пройти, потому что expect_json ожидает, что ВСЕ ключи от людей будут записаны в тест.

Я прочешут Google/документации Airborne, но безрезультатно: https://github.com/brooklynDev/airborne

+0

Документы говорят, что вы делаете это правильно. Вы дважды проверили, что ответ действительно правильный? Что такое сам json? –

+0

Таким образом, ответ JSON для каждого объекта человека является: лицо: { пол: «MALE», имя: «Джон», возраст: 21 } (Там на самом деле много, много больше ключей, но это просто пример) –

+0

Дважды проверили ответ. Он перечисляет все ключи в JSON и говорит, что он не соответствует ожидаемому, а затем в разделе «Diff:» перечислены ключи, которые я не включил в тест. –

ответ

1

Это место держатель ответ - искать более подробную информацию:

Это link производит ниже JSON из примеров Airborne:

{ 
    "cars": [{ 
     "make": "Tesla", 
     "model": "Model S", 
     "owners": [ 
      {"name": "Bart Simpson"} 
     ] 
    }, { 
     "make": "Lamborghini", 
     "model": "Aventador", 
     "owners": [ 
      {"name": "Peter Griffin"} 

     ] 
    }] 
} 

Это тест RSpec (он использует действительный URL-адрес в Интернете, поэтому любой может попробовать его)

require 'airborne' 

describe 'sample spec' do 
    it 'should validate car make' do 
    get 'https://raw.githubusercontent.com/brooklynDev/airborne/master/spec/test_responses/array_with_nested.json' 
    expect_json('cars.*', make: 'Tesla') 
    end 
end 

Если вы выполните вышеуказанный тест, используя rspec <filename>.rb, он выдаст ошибку, как показано ниже. Ошибка ожидается, поскольку одна из записей JSON не имеет make как Tesla. Однако пример демонстрирует, что Airborne имеет возможность рассматривать один атрибут во всех вложенных объектах JSON в данном массиве JSON.

E:\elixir>rspec fun.rb 
F 

Failures: 

    1) sample spec should validate car make 
    Failure/Error: expect_json('cars.*', make: 'Tesla') 

     expected: "Tesla" 
      got: "Lamborghini" 

     (compared using ==) 
    # ./fun.rb:6:in `block (2 levels) in <top (required)>' 

Finished in 3.98 seconds (files took 0.68346 seconds to load) 
1 example, 1 failure 

Failed examples: 

rspec ./fun.rb:4 # sample spec should validate car make 

Пожалуйста, обновите ваш вопрос образца JSON и вывод RSpec, чтобы показать, как ваш код похож на приведенном выше примере, как если бы это было, вы должны не столкнулись с проблемой.

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