У меня есть курсы, каждый курс имеет массив сегментов. Каждый сегмент содержит атрибут типа. Если тип - викторина, то сегмент также содержит массив вопросов.
это пример запроса JSON для всех курсов:
[
{
id: 1,
title: "Angular",
author: "Dana",
segments: [
{
id: 1,
unit_id: 1,
unit_title: "Introduction",
name: "Lesson 1: Basic Stuff",
segment_type: "Video",
data: "https://www.angular.com/vid1.flv"
},
{
id: 2,
unit_id: 1,
unit_title: "Introduction",
name: "Quiz",
segment_type: "Quiz",
questions: [
{
id: 1,
question: "Question 1",
answer1: "Answer1",
answer2: "Answer2",
answer3: "Answer3",
answer4: "Answer4",
correct: 3
},
{
id: 2,
question: "Question2",
answer1: "Answer1",
answer2: "Answer2",
answer3: "Answer3",
answer4: "Answer4",
correct: 2
},
{
id: 3,
question: "Question3",
answer1: "Answer1",
answer2: "Answer2",
answer3: "Answer3",
answer4: "Answer4",
correct: 4
}
]
}
]
},
{
id: 2,
title: "Ruby on Rails",
author: "Dana",
segments: [ ]
}
]
Я начал писать спецификацию для контроллера, но я не знаю, как ссылаться на вложенные данные внутри курса. Я не нашел в Google ничего полезного
это контроллер и спецификации, которые я написал:
контроллер
describe "GET #show" do
before do
get :show, id: course.id
end
let(:course) {Course.create(title: "Test", author: "Ofir is The Best")}
it "returns http success" do
expect(response).to have_http_status(:success)
end
it "response with JSON body containing expected Course attributes" do
hash_body = nil
expect { hash_body = JSON.parse(response.body).with_indifferent_access }.not_to raise_exception
expect(hash_body.keys).to match_array([:id, :title, :author])
expect(hash_body).to match({
id: course.id,
title: 'Test',
author: 'Ofir is The Best'
})
end
end
спецификация контроллера
describe "GET #show" do
before do
get :show, id: course.id
end
let(:course) {Course.create(title: "Test", author: "Ofir is The Best")}
it "returns http success" do
expect(response).to have_http_status(:success)
end
it "response with JSON body containing expected Course attributes" do
hash_body = nil
expect { hash_body = JSON.parse(response.body).with_indifferent_access }.not_to raise_exception
expect(hash_body.keys).to match_array([:id, :title, :author])
expect(hash_body).to match({
id: course.id,
title: 'Test',
author: 'Ofir is The Best'
})
end
end