Уверяю вас, без проблем:
rails g rspec:controller Admin::Posts
, например, и поехали:
require 'rails_helper'
RSpec.describe 'Admin::Posts', type: :request do
subject { get '/posts' }
it(:status) { should eq 200 }
end
Тест проходит? - несомненно. Ок.
Дальше чуть сложнее.
rails g rspec:controller Admin::Users
Для этого теста нам понадобится добавить в rails_helper.rb следующую строчку:
config.include Devise::Test::IntegrationHelpers
А также, возможно, и эту - в том случае, если решите раскомментировать render_views и проверять, в том числе, еще и HTML:
config.include RSpec::Rails::ViewRendering
Поскольку по старинке используем assigns method, придется добавить в Gemfile и инсталлировать этот джем:
group :test do
gem 'rails-controller-testing'
end
Вы в любой момент можете клонировать репозиторий CRUD-Blog и самостоятельно поэкспериментировать с кодом.
А тест вот такой: логинимся, рендерим юзера и затем меняем ему email, проверяя обновление:
require 'rails_helper'
RSpec.describe 'Admin::Users', type: :request do
# render_views
let(:user) { User.create!(email: Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript. ', password: 'password') }
before(:each) do
sign_in user
end
describe 'edit' do
it 'renders user form' do
get "/admin/admins/#{user.id}/edit"
expect(assigns(:admin)).to eq user
end
end
describe 'update' do
it 'updates user' do
patch "/admin/admins/#{user.id}", params: { id: user, user: { email: Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript. ' } }
user.reload
expect(user.email).to eq Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript. '
end
end
end
Так выглядит этот тест для моего блога; у вас частности могут разниться, будьте внимательны. Покажу примерно то же самое для категорий... разумеется, не забыть сгенерировать новый спек:
rails g rspec:controller Admin::Categories
В данном случае проверяем, что, залогинившись посредством devise, мы видим только что созданную категорию, можем изменить ее название и добавить описание:
require 'rails_helper'
RSpec.describe 'Admin::Categories', type: :request do
let(:user) { User.create!(email: Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript. ', password: 'password') }
let(:category) { Category.create!(title: 'bluhbluhbluh') }
before(:each) do
sign_in user
end
describe 'edit' do
it 'renders category' do
get "/admin/categories/#{category.title}/edit"
expect(assigns(:category)).to eq category
end
end
describe 'update' do
it 'updates category' do
patch "/admin/categories/#{category.title}", params: {
id: category, category: {
title: 'new-title',
description: 'Description'
}
}
category.reload
expect(category.title).to eq 'new-title'
expect(category.description).to eq 'Description'
end
end
end
Вот как-то так.