Понедельник, 24 января 2022 04:26

Testing ActiveAdmin with rspec

Оцените материал
(1 Голосовать)
Testing ActiveAdmin with rspec
Testing ActiveAdmin with rspec

 

Уверяю вас, без проблем:

 

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

 

В качестве live demo вы в любой момент можете клонировать репозиторий 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

 

 Вот как-то так.

Оставить комментарий

Добавьте ваш комментарий

Заказать сайт

Веб-разработка. Заказать сайт

Вы можете заказать сайт-визитку, блог, корпоративный сайт, интернет-магазин или коммерческий web-портал.