Идея заключается в том, что вместо того, чтобы тыкать в свой контроллер и проверять его внутренние переменные, вы должны проверять свои контроллеры, проверяя вывод.
В RSpec вы можете сделать это с помощью спецификации запросов и функций.
# config/specs/features/teams_spec.html
RSpec.feature 'Teams' do
scenario 'when a user views the teams' do
Team.create(name: 'Team Rocket')
visit '/teams'
expect(page).to have_content 'Team Rocket'
end
end
# config/specs/requests/teams_spec.html
RSpec.describe 'Teams', type: :request do
describe 'GET /teams.json' do
it "includes the team" do
team = Team.create(name: 'Team Rocket')
get teams_path(format: :json)
expect(parsed_response.first['name']).to eq 'Team Rocket'
end
end
describe 'GET /teams' do
it "includes the team" do
team = Team.create(name: 'Team Rocket')
get teams_path
expect(page).to have_content 'Team Rocket'
end
end
end
Ключевым отличием является то, что спецификации функций тестируют приложение на основе пользовательской истории, а спецификации запросов находятся на более низком уровне.
1 - Как я могу добиться того же, что и ожидал (назначает (: команды)).
э ([команда]). Наверное, я спрашиваю, как я могу проверить, есть ли у меня экземпляр
переменная в действии index со значениями [team]
Либо используйте гем назначений для унаследованной совместимости, либо протестируйте визуализированный вывод.
2 - Если этот метод был перемещен в гем, я прочитал в выпусках Github,
причина в том, что вы не должны проверять это там, контроллер должен
просто проверить ответ, куки и т. д. Но я запутался, так как в радости вас
может проверить переменную экземпляра. Должен ли я проверить это там или нет? Если не,
где? В моем views / index_spec.rb тестировании, если у меня есть все команды?
Если под Relish вы подразумеваете RSpec, то для RSpec-rails требуется некоторое время, чтобы догнать современный уровень в тестировании Rails. Но то же самое все еще применяется. Официальная рекомендация команды RSpec состоит в том, чтобы не использовать присваивания и изменять спецификации контроллеров в пользу спецификаций запросов. Спецификации представлений здесь не очень актуальны - они используются, если вы хотите тестировать сложные представления изолированно.
3 - Альтернатива: поскольку TeamsController является нормальным классом, я должен
создать спецификацию в папке spec / models /
spec / models / tasks_controller.rb и проверьте, есть ли индекс метода
переменная экземпляра @teams с содержимым, которое я хочу?
Просто нет. Контроллеры - это не просто нормальные классы. Вы не можете просто создать экземпляр контроллера с MyController.new
, поэтому в тестах контроллеров все это происходит.