Assuming that the result is in JSON format, as a list of objects, each representing a user, eg:
[{"nome": "João", "idade": 26}, {"nome": "Maria", "idade": 19}]
You can get the body of the response with response.body
, read the JSON document, and check its format. Something similar to this:
describe "GET 'index'" do
it "returns a valid list of users" do
get 'index'
expect(response).to be_success
# processar o JSON e se certificar de que é válido
doc = nil
expect {doc = JSON.parse(response.body)}.not_to raise_error(JSON::ParserError)
# é uma lista
expect(doc).to be_kind_of(Array)
# onde cada elemento da lista...
doc.each do |user|
# é um objeto
expect(user).to be_kind_of(Hash)
# com "nome" e "idade"
expect(user).to have_key("nome")
expect(user).to have_key("idade")
# sendo uma string e um inteiro
expect(user["nome"]).to be_kind_of(String)
expect(user["idade"]).to be_kind_of(Integer)
end
end
end
It depends on how exact and narrow you want your test. You can still check things as if the ages are positive, or if there are other keys besides "name" and < p>
See more details on list of expectations >.