Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
it_behaves_like "protected controller" do
let(:method) { 'hello' }
end
Тесты контроллеров, как правило, не окупают себя — они пишутся дольше всего и наиболее чувствительны к изменением тестируемого кода. Лично по мне — в рельсах лучше максимально отказаться от тестов контроллеров (оставить только там где это необходимо), а писать интеграционные тесты — т.е. именно слать запросы get, put, post, delete и т.д. на нужные адреса, либо кликать по ссылкам.
2. Лучше всё же shared examples. Решается просто — весь общий код пишется, собственно, в него, а нужные переменные передаются через let
Непонятные тесты, которые дают 100% покрытия
before { self.controller = c.new }
return new Object[][]{
{new LoginHelperTestDataProviderLoginAsUserValue("96968c29f29b96103b1c38f30d8f0fe2", 1l, 2l, Role.ROLE_SUPER)},
{new LoginHelperTestDataProviderLoginAsUserValue("d4bbe02790bdc33c5778fd8ec4e4d036", 2l, 5l, Role.ROLE_ADMIN)},
{new LoginHelperTestDataProviderLoginAsUserValue("712d3a285047d2ed252990d53cca3893", 2l, 56l, Role.ROLE_ADMIN)},
{new LoginHelperTestDataProviderLoginAsUserValue("56e659746ba7b3fdc24983352777f6d9", 3l, 232l, Role.ROLE_MANAGER)},
{new LoginHelperTestDataProviderLoginAsUserValue("56e659746ba7b3fdc24983352777f6d9", 4l, 64324l, Role.ROLE_MANAGER)},
{new LoginHelperTestDataProviderLoginAsUserValue("56e659746ba7b3fdc24983352777f6d9", 5l, 86456l, Role.ROLE_MANAGER)},
};
require 'rails_helper'
describe Api::BaseController, type: :controller do
subject { get :index }
let(:user) { Fabricate(:user) }
let(:admin) { Fabricate(:admin) }
controller do
def index
render nothing: true, status: :ok
end
end
describe 'when user isn\'t admin' do
before {
sign_in user
subject
}
it 'return 403' do
expect_status '403'
end
end
describe 'when user is admin' do
before {
sign_in admin
subject
}
it 'return 200' do
expect_status '200'
end
end
end
Автоматизированное тестирование контроллеров в Rails