Rails6] RSpec에 의한 페이지 네이션 기능 (kaminari)의 결합 테스트 구현
소개
서비스 품질을 유지하기 위해 필수적인 테스트를 실시하고 있습니다.
이번에는, 카미나리를 사용해, 구현한 페이지네이션 기능의 결합 테스트를 구현해, 그 구현 내용을 기사로 해 가고 싶습니다.
전제
· kaminari라는 gem을 사용한 페이지 네이션 기능이 구현되었습니다.
gem 'kaminari'
gem 'kaminari-bootstrap'
· 투고시의 결합 테스트와 같은 테스트 파일에 페이지 네이션 기능의 내용도 기술하고 있습니다.
투고시에 있어서의 테스트 코드의 기술은 이하의 URL보다 보실 수 있습니다.
버전
루비 버전 ruby-2.6.5
Rails 버전 Rails:6.0.0
rspec-rails 4.0.0
실시한 테스트


페이지 네이션 화면

모델에서 페이지 네이션 설정
모델에서, 투고의 표시는 1페이지 3건까지로 하고 있습니다.
app/models/definition.rb# 〜省略〜
# 最近作成されたユーザーから表示
default_scope -> { order(created_at: :desc) }
# 一度に表示する投稿数
paginates_per 3
# 〜省略〜
정의 테이블의 열 소개
xxx_create_definitions.rbclass CreateDefinitions < ActiveRecord::Migration[6.0]
def change
create_table :definitions do |t|
t.text :title, null: false
t.text :body, null: false
t.references :user, foreign_key: true
t.timestamps
end
end
end
모델의 유효성 검사
app/models/definition.rbclass Definition < ApplicationRecord
belongs_to :user
has_many :answers, dependent: :destroy
has_many :reviews, dependent: :destroy
has_many :notifications, dependent: :destroy
has_many :likes, dependent: :destroy
validates :title, presence: true
validates :body, presence: true
# 〜省略〜
FactoryBot의 내역
spec/factories/definitions.rbFactoryBot.define do
factory :definition do
title {Faker::Lorem.sentence}
body {Faker::Lorem.sentence}
association :user
end
end
지원 모듈
신규 투고할 때의 기술을 모듈화하고 있습니다.
spec/support/definition_up_support.rbmodule DefinitionUpSupport
def definition_up(definition_title, definition_body)
# 新規投稿ページへのリンクがあることを確認する
expect(page).to have_content('投稿')
# 投稿作成ページに移動する
visit new_definition_path
# フォームに情報を入力する
fill_in 'definition[title]', with: definition_title
fill_in 'definition[body]', with: definition_body
# 送信するとDefinitionモデルのカウントが1上がることを確認する
expect{
find('input[name="commit"]').click
}.to change { Definition.count }.by(1)
# 投稿完了ページに遷移することを確認する
expect(current_path).to eq(root_path)
end
end
페이지 전환과 게시물의 존재를 확인하는 설명을 모듈화하고 있습니다.
spec/support/page_up_support.rbmodule PageUpSupport
def page_up(definition)
# ページ遷移していることを確認する
expect(current_path).to eq(root_path)
# 投稿があることを確認する
expect(page).to have_no_content("#{definition.title}")
end
end
테스트 코드 내용
spec/system/definitions_spec.rb
#投稿における結合テストの記述は省略
RSpec.describe 'ページネーションについて', type: :system do
before do
@definition = FactoryBot.create(:definition)
@definition_title = Faker::Lorem.sentence
@definition_body = Faker::Lorem.sentence
end
context 'ページネーションでページ遷移ができるとき' do
it 'ログインしたユーザーはページネーションでページ遷移ができる' do
# definitionを投稿したユーザーでログインする
sign_in(@definition.user)
# ①新規投稿する(投稿は3件表示のため4つ投稿を行う)
definition_up(@definition_title, @definition_body)
# ②新規投稿する(投稿は3件表示のため4つ投稿を行う)
definition_up(@definition_title, @definition_body)
# ③新規投稿する(投稿は3件表示のため4つ投稿を行う)
definition_up(@definition_title, @definition_body)
# ④新規投稿する(投稿は3件表示のため4つ投稿を行う)
definition_up(@definition_title, @definition_body)
# 投稿ページに移動する
visit root_path(anchor:"ethics")
# ページがあることを確認
expect(page).to have_css(".page-link")
# ページネーション'2'のボタンをクリックし、次ページへと行く
expect{ find_link('2', rel="next").click }
# ページ遷移していることを確認し、投稿があることを確認する
page_up(@definition)
# ページネーション'1'のボタンをクリックし前ページへと行く
expect{ find_link('1', rel="prev").click }
# ページ遷移していることを確認し、投稿があることを確認する
page_up(@definition)
# ページネーションボタン'最後'のボタンをクリックし、最後のページへと行く
expect{ find_link('最後', ".page-link").click }
# ページ遷移していることを確認し、投稿があることを確認する
page_up(@definition)
# ページネーションボタン'最初'のボタンをクリックし、最初のページへと行く
expect{ find_link('最初', ".page-link").click }
# ページ遷移していることを確認し、投稿があることを確認する
page_up(@definition)
end
end
end
이상입니다.
Reference
이 문제에 관하여(Rails6] RSpec에 의한 페이지 네이션 기능 (kaminari)의 결합 테스트 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/narimiya/items/53a956a265b99c58c309
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
· kaminari라는 gem을 사용한 페이지 네이션 기능이 구현되었습니다.
gem 'kaminari'
gem 'kaminari-bootstrap'
· 투고시의 결합 테스트와 같은 테스트 파일에 페이지 네이션 기능의 내용도 기술하고 있습니다.
투고시에 있어서의 테스트 코드의 기술은 이하의 URL보다 보실 수 있습니다.
버전
루비 버전 ruby-2.6.5
Rails 버전 Rails:6.0.0
rspec-rails 4.0.0
실시한 테스트


페이지 네이션 화면

모델에서 페이지 네이션 설정
모델에서, 투고의 표시는 1페이지 3건까지로 하고 있습니다.
app/models/definition.rb# 〜省略〜
# 最近作成されたユーザーから表示
default_scope -> { order(created_at: :desc) }
# 一度に表示する投稿数
paginates_per 3
# 〜省略〜
정의 테이블의 열 소개
xxx_create_definitions.rbclass CreateDefinitions < ActiveRecord::Migration[6.0]
def change
create_table :definitions do |t|
t.text :title, null: false
t.text :body, null: false
t.references :user, foreign_key: true
t.timestamps
end
end
end
모델의 유효성 검사
app/models/definition.rbclass Definition < ApplicationRecord
belongs_to :user
has_many :answers, dependent: :destroy
has_many :reviews, dependent: :destroy
has_many :notifications, dependent: :destroy
has_many :likes, dependent: :destroy
validates :title, presence: true
validates :body, presence: true
# 〜省略〜
FactoryBot의 내역
spec/factories/definitions.rbFactoryBot.define do
factory :definition do
title {Faker::Lorem.sentence}
body {Faker::Lorem.sentence}
association :user
end
end
지원 모듈
신규 투고할 때의 기술을 모듈화하고 있습니다.
spec/support/definition_up_support.rbmodule DefinitionUpSupport
def definition_up(definition_title, definition_body)
# 新規投稿ページへのリンクがあることを確認する
expect(page).to have_content('投稿')
# 投稿作成ページに移動する
visit new_definition_path
# フォームに情報を入力する
fill_in 'definition[title]', with: definition_title
fill_in 'definition[body]', with: definition_body
# 送信するとDefinitionモデルのカウントが1上がることを確認する
expect{
find('input[name="commit"]').click
}.to change { Definition.count }.by(1)
# 投稿完了ページに遷移することを確認する
expect(current_path).to eq(root_path)
end
end
페이지 전환과 게시물의 존재를 확인하는 설명을 모듈화하고 있습니다.
spec/support/page_up_support.rbmodule PageUpSupport
def page_up(definition)
# ページ遷移していることを確認する
expect(current_path).to eq(root_path)
# 投稿があることを確認する
expect(page).to have_no_content("#{definition.title}")
end
end
테스트 코드 내용
spec/system/definitions_spec.rb
#投稿における結合テストの記述は省略
RSpec.describe 'ページネーションについて', type: :system do
before do
@definition = FactoryBot.create(:definition)
@definition_title = Faker::Lorem.sentence
@definition_body = Faker::Lorem.sentence
end
context 'ページネーションでページ遷移ができるとき' do
it 'ログインしたユーザーはページネーションでページ遷移ができる' do
# definitionを投稿したユーザーでログインする
sign_in(@definition.user)
# ①新規投稿する(投稿は3件表示のため4つ投稿を行う)
definition_up(@definition_title, @definition_body)
# ②新規投稿する(投稿は3件表示のため4つ投稿を行う)
definition_up(@definition_title, @definition_body)
# ③新規投稿する(投稿は3件表示のため4つ投稿を行う)
definition_up(@definition_title, @definition_body)
# ④新規投稿する(投稿は3件表示のため4つ投稿を行う)
definition_up(@definition_title, @definition_body)
# 投稿ページに移動する
visit root_path(anchor:"ethics")
# ページがあることを確認
expect(page).to have_css(".page-link")
# ページネーション'2'のボタンをクリックし、次ページへと行く
expect{ find_link('2', rel="next").click }
# ページ遷移していることを確認し、投稿があることを確認する
page_up(@definition)
# ページネーション'1'のボタンをクリックし前ページへと行く
expect{ find_link('1', rel="prev").click }
# ページ遷移していることを確認し、投稿があることを確認する
page_up(@definition)
# ページネーションボタン'最後'のボタンをクリックし、最後のページへと行く
expect{ find_link('最後', ".page-link").click }
# ページ遷移していることを確認し、投稿があることを確認する
page_up(@definition)
# ページネーションボタン'最初'のボタンをクリックし、最初のページへと行く
expect{ find_link('最初', ".page-link").click }
# ページ遷移していることを確認し、投稿があることを確認する
page_up(@definition)
end
end
end
이상입니다.
Reference
이 문제에 관하여(Rails6] RSpec에 의한 페이지 네이션 기능 (kaminari)의 결합 테스트 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/narimiya/items/53a956a265b99c58c309
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)


페이지 네이션 화면

모델에서 페이지 네이션 설정
모델에서, 투고의 표시는 1페이지 3건까지로 하고 있습니다.
app/models/definition.rb# 〜省略〜
# 最近作成されたユーザーから表示
default_scope -> { order(created_at: :desc) }
# 一度に表示する投稿数
paginates_per 3
# 〜省略〜
정의 테이블의 열 소개
xxx_create_definitions.rbclass CreateDefinitions < ActiveRecord::Migration[6.0]
def change
create_table :definitions do |t|
t.text :title, null: false
t.text :body, null: false
t.references :user, foreign_key: true
t.timestamps
end
end
end
모델의 유효성 검사
app/models/definition.rbclass Definition < ApplicationRecord
belongs_to :user
has_many :answers, dependent: :destroy
has_many :reviews, dependent: :destroy
has_many :notifications, dependent: :destroy
has_many :likes, dependent: :destroy
validates :title, presence: true
validates :body, presence: true
# 〜省略〜
FactoryBot의 내역
spec/factories/definitions.rbFactoryBot.define do
factory :definition do
title {Faker::Lorem.sentence}
body {Faker::Lorem.sentence}
association :user
end
end
지원 모듈
신규 투고할 때의 기술을 모듈화하고 있습니다.
spec/support/definition_up_support.rbmodule DefinitionUpSupport
def definition_up(definition_title, definition_body)
# 新規投稿ページへのリンクがあることを確認する
expect(page).to have_content('投稿')
# 投稿作成ページに移動する
visit new_definition_path
# フォームに情報を入力する
fill_in 'definition[title]', with: definition_title
fill_in 'definition[body]', with: definition_body
# 送信するとDefinitionモデルのカウントが1上がることを確認する
expect{
find('input[name="commit"]').click
}.to change { Definition.count }.by(1)
# 投稿完了ページに遷移することを確認する
expect(current_path).to eq(root_path)
end
end
페이지 전환과 게시물의 존재를 확인하는 설명을 모듈화하고 있습니다.
spec/support/page_up_support.rbmodule PageUpSupport
def page_up(definition)
# ページ遷移していることを確認する
expect(current_path).to eq(root_path)
# 投稿があることを確認する
expect(page).to have_no_content("#{definition.title}")
end
end
테스트 코드 내용
spec/system/definitions_spec.rb
#投稿における結合テストの記述は省略
RSpec.describe 'ページネーションについて', type: :system do
before do
@definition = FactoryBot.create(:definition)
@definition_title = Faker::Lorem.sentence
@definition_body = Faker::Lorem.sentence
end
context 'ページネーションでページ遷移ができるとき' do
it 'ログインしたユーザーはページネーションでページ遷移ができる' do
# definitionを投稿したユーザーでログインする
sign_in(@definition.user)
# ①新規投稿する(投稿は3件表示のため4つ投稿を行う)
definition_up(@definition_title, @definition_body)
# ②新規投稿する(投稿は3件表示のため4つ投稿を行う)
definition_up(@definition_title, @definition_body)
# ③新規投稿する(投稿は3件表示のため4つ投稿を行う)
definition_up(@definition_title, @definition_body)
# ④新規投稿する(投稿は3件表示のため4つ投稿を行う)
definition_up(@definition_title, @definition_body)
# 投稿ページに移動する
visit root_path(anchor:"ethics")
# ページがあることを確認
expect(page).to have_css(".page-link")
# ページネーション'2'のボタンをクリックし、次ページへと行く
expect{ find_link('2', rel="next").click }
# ページ遷移していることを確認し、投稿があることを確認する
page_up(@definition)
# ページネーション'1'のボタンをクリックし前ページへと行く
expect{ find_link('1', rel="prev").click }
# ページ遷移していることを確認し、投稿があることを確認する
page_up(@definition)
# ページネーションボタン'最後'のボタンをクリックし、最後のページへと行く
expect{ find_link('最後', ".page-link").click }
# ページ遷移していることを確認し、投稿があることを確認する
page_up(@definition)
# ページネーションボタン'最初'のボタンをクリックし、最初のページへと行く
expect{ find_link('最初', ".page-link").click }
# ページ遷移していることを確認し、投稿があることを確認する
page_up(@definition)
end
end
end
이상입니다.
Reference
이 문제에 관하여(Rails6] RSpec에 의한 페이지 네이션 기능 (kaminari)의 결합 테스트 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/narimiya/items/53a956a265b99c58c309
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
모델에서, 투고의 표시는 1페이지 3건까지로 하고 있습니다.
app/models/definition.rb
# 〜省略〜
# 最近作成されたユーザーから表示
default_scope -> { order(created_at: :desc) }
# 一度に表示する投稿数
paginates_per 3
# 〜省略〜
정의 테이블의 열 소개
xxx_create_definitions.rbclass CreateDefinitions < ActiveRecord::Migration[6.0]
def change
create_table :definitions do |t|
t.text :title, null: false
t.text :body, null: false
t.references :user, foreign_key: true
t.timestamps
end
end
end
모델의 유효성 검사
app/models/definition.rbclass Definition < ApplicationRecord
belongs_to :user
has_many :answers, dependent: :destroy
has_many :reviews, dependent: :destroy
has_many :notifications, dependent: :destroy
has_many :likes, dependent: :destroy
validates :title, presence: true
validates :body, presence: true
# 〜省略〜
FactoryBot의 내역
spec/factories/definitions.rbFactoryBot.define do
factory :definition do
title {Faker::Lorem.sentence}
body {Faker::Lorem.sentence}
association :user
end
end
지원 모듈
신규 투고할 때의 기술을 모듈화하고 있습니다.
spec/support/definition_up_support.rbmodule DefinitionUpSupport
def definition_up(definition_title, definition_body)
# 新規投稿ページへのリンクがあることを確認する
expect(page).to have_content('投稿')
# 投稿作成ページに移動する
visit new_definition_path
# フォームに情報を入力する
fill_in 'definition[title]', with: definition_title
fill_in 'definition[body]', with: definition_body
# 送信するとDefinitionモデルのカウントが1上がることを確認する
expect{
find('input[name="commit"]').click
}.to change { Definition.count }.by(1)
# 投稿完了ページに遷移することを確認する
expect(current_path).to eq(root_path)
end
end
페이지 전환과 게시물의 존재를 확인하는 설명을 모듈화하고 있습니다.
spec/support/page_up_support.rbmodule PageUpSupport
def page_up(definition)
# ページ遷移していることを確認する
expect(current_path).to eq(root_path)
# 投稿があることを確認する
expect(page).to have_no_content("#{definition.title}")
end
end
테스트 코드 내용
spec/system/definitions_spec.rb
#投稿における結合テストの記述は省略
RSpec.describe 'ページネーションについて', type: :system do
before do
@definition = FactoryBot.create(:definition)
@definition_title = Faker::Lorem.sentence
@definition_body = Faker::Lorem.sentence
end
context 'ページネーションでページ遷移ができるとき' do
it 'ログインしたユーザーはページネーションでページ遷移ができる' do
# definitionを投稿したユーザーでログインする
sign_in(@definition.user)
# ①新規投稿する(投稿は3件表示のため4つ投稿を行う)
definition_up(@definition_title, @definition_body)
# ②新規投稿する(投稿は3件表示のため4つ投稿を行う)
definition_up(@definition_title, @definition_body)
# ③新規投稿する(投稿は3件表示のため4つ投稿を行う)
definition_up(@definition_title, @definition_body)
# ④新規投稿する(投稿は3件表示のため4つ投稿を行う)
definition_up(@definition_title, @definition_body)
# 投稿ページに移動する
visit root_path(anchor:"ethics")
# ページがあることを確認
expect(page).to have_css(".page-link")
# ページネーション'2'のボタンをクリックし、次ページへと行く
expect{ find_link('2', rel="next").click }
# ページ遷移していることを確認し、投稿があることを確認する
page_up(@definition)
# ページネーション'1'のボタンをクリックし前ページへと行く
expect{ find_link('1', rel="prev").click }
# ページ遷移していることを確認し、投稿があることを確認する
page_up(@definition)
# ページネーションボタン'最後'のボタンをクリックし、最後のページへと行く
expect{ find_link('最後', ".page-link").click }
# ページ遷移していることを確認し、投稿があることを確認する
page_up(@definition)
# ページネーションボタン'最初'のボタンをクリックし、最初のページへと行く
expect{ find_link('最初', ".page-link").click }
# ページ遷移していることを確認し、投稿があることを確認する
page_up(@definition)
end
end
end
이상입니다.
Reference
이 문제에 관하여(Rails6] RSpec에 의한 페이지 네이션 기능 (kaminari)의 결합 테스트 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/narimiya/items/53a956a265b99c58c309
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
class CreateDefinitions < ActiveRecord::Migration[6.0]
def change
create_table :definitions do |t|
t.text :title, null: false
t.text :body, null: false
t.references :user, foreign_key: true
t.timestamps
end
end
end
app/models/definition.rb
class Definition < ApplicationRecord
belongs_to :user
has_many :answers, dependent: :destroy
has_many :reviews, dependent: :destroy
has_many :notifications, dependent: :destroy
has_many :likes, dependent: :destroy
validates :title, presence: true
validates :body, presence: true
# 〜省略〜
FactoryBot의 내역
spec/factories/definitions.rbFactoryBot.define do
factory :definition do
title {Faker::Lorem.sentence}
body {Faker::Lorem.sentence}
association :user
end
end
지원 모듈
신규 투고할 때의 기술을 모듈화하고 있습니다.
spec/support/definition_up_support.rbmodule DefinitionUpSupport
def definition_up(definition_title, definition_body)
# 新規投稿ページへのリンクがあることを確認する
expect(page).to have_content('投稿')
# 投稿作成ページに移動する
visit new_definition_path
# フォームに情報を入力する
fill_in 'definition[title]', with: definition_title
fill_in 'definition[body]', with: definition_body
# 送信するとDefinitionモデルのカウントが1上がることを確認する
expect{
find('input[name="commit"]').click
}.to change { Definition.count }.by(1)
# 投稿完了ページに遷移することを確認する
expect(current_path).to eq(root_path)
end
end
페이지 전환과 게시물의 존재를 확인하는 설명을 모듈화하고 있습니다.
spec/support/page_up_support.rbmodule PageUpSupport
def page_up(definition)
# ページ遷移していることを確認する
expect(current_path).to eq(root_path)
# 投稿があることを確認する
expect(page).to have_no_content("#{definition.title}")
end
end
테스트 코드 내용
spec/system/definitions_spec.rb
#投稿における結合テストの記述は省略
RSpec.describe 'ページネーションについて', type: :system do
before do
@definition = FactoryBot.create(:definition)
@definition_title = Faker::Lorem.sentence
@definition_body = Faker::Lorem.sentence
end
context 'ページネーションでページ遷移ができるとき' do
it 'ログインしたユーザーはページネーションでページ遷移ができる' do
# definitionを投稿したユーザーでログインする
sign_in(@definition.user)
# ①新規投稿する(投稿は3件表示のため4つ投稿を行う)
definition_up(@definition_title, @definition_body)
# ②新規投稿する(投稿は3件表示のため4つ投稿を行う)
definition_up(@definition_title, @definition_body)
# ③新規投稿する(投稿は3件表示のため4つ投稿を行う)
definition_up(@definition_title, @definition_body)
# ④新規投稿する(投稿は3件表示のため4つ投稿を行う)
definition_up(@definition_title, @definition_body)
# 投稿ページに移動する
visit root_path(anchor:"ethics")
# ページがあることを確認
expect(page).to have_css(".page-link")
# ページネーション'2'のボタンをクリックし、次ページへと行く
expect{ find_link('2', rel="next").click }
# ページ遷移していることを確認し、投稿があることを確認する
page_up(@definition)
# ページネーション'1'のボタンをクリックし前ページへと行く
expect{ find_link('1', rel="prev").click }
# ページ遷移していることを確認し、投稿があることを確認する
page_up(@definition)
# ページネーションボタン'最後'のボタンをクリックし、最後のページへと行く
expect{ find_link('最後', ".page-link").click }
# ページ遷移していることを確認し、投稿があることを確認する
page_up(@definition)
# ページネーションボタン'最初'のボタンをクリックし、最初のページへと行く
expect{ find_link('最初', ".page-link").click }
# ページ遷移していることを確認し、投稿があることを確認する
page_up(@definition)
end
end
end
이상입니다.
Reference
이 문제에 관하여(Rails6] RSpec에 의한 페이지 네이션 기능 (kaminari)의 결합 테스트 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/narimiya/items/53a956a265b99c58c309
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
FactoryBot.define do
factory :definition do
title {Faker::Lorem.sentence}
body {Faker::Lorem.sentence}
association :user
end
end
신규 투고할 때의 기술을 모듈화하고 있습니다.
spec/support/definition_up_support.rb
module DefinitionUpSupport
def definition_up(definition_title, definition_body)
# 新規投稿ページへのリンクがあることを確認する
expect(page).to have_content('投稿')
# 投稿作成ページに移動する
visit new_definition_path
# フォームに情報を入力する
fill_in 'definition[title]', with: definition_title
fill_in 'definition[body]', with: definition_body
# 送信するとDefinitionモデルのカウントが1上がることを確認する
expect{
find('input[name="commit"]').click
}.to change { Definition.count }.by(1)
# 投稿完了ページに遷移することを確認する
expect(current_path).to eq(root_path)
end
end
페이지 전환과 게시물의 존재를 확인하는 설명을 모듈화하고 있습니다.
spec/support/page_up_support.rb
module PageUpSupport
def page_up(definition)
# ページ遷移していることを確認する
expect(current_path).to eq(root_path)
# 投稿があることを確認する
expect(page).to have_no_content("#{definition.title}")
end
end
테스트 코드 내용
spec/system/definitions_spec.rb
#投稿における結合テストの記述は省略
RSpec.describe 'ページネーションについて', type: :system do
before do
@definition = FactoryBot.create(:definition)
@definition_title = Faker::Lorem.sentence
@definition_body = Faker::Lorem.sentence
end
context 'ページネーションでページ遷移ができるとき' do
it 'ログインしたユーザーはページネーションでページ遷移ができる' do
# definitionを投稿したユーザーでログインする
sign_in(@definition.user)
# ①新規投稿する(投稿は3件表示のため4つ投稿を行う)
definition_up(@definition_title, @definition_body)
# ②新規投稿する(投稿は3件表示のため4つ投稿を行う)
definition_up(@definition_title, @definition_body)
# ③新規投稿する(投稿は3件表示のため4つ投稿を行う)
definition_up(@definition_title, @definition_body)
# ④新規投稿する(投稿は3件表示のため4つ投稿を行う)
definition_up(@definition_title, @definition_body)
# 投稿ページに移動する
visit root_path(anchor:"ethics")
# ページがあることを確認
expect(page).to have_css(".page-link")
# ページネーション'2'のボタンをクリックし、次ページへと行く
expect{ find_link('2', rel="next").click }
# ページ遷移していることを確認し、投稿があることを確認する
page_up(@definition)
# ページネーション'1'のボタンをクリックし前ページへと行く
expect{ find_link('1', rel="prev").click }
# ページ遷移していることを確認し、投稿があることを確認する
page_up(@definition)
# ページネーションボタン'最後'のボタンをクリックし、最後のページへと行く
expect{ find_link('最後', ".page-link").click }
# ページ遷移していることを確認し、投稿があることを確認する
page_up(@definition)
# ページネーションボタン'最初'のボタンをクリックし、最初のページへと行く
expect{ find_link('最初', ".page-link").click }
# ページ遷移していることを確認し、投稿があることを確認する
page_up(@definition)
end
end
end
이상입니다.
Reference
이 문제에 관하여(Rails6] RSpec에 의한 페이지 네이션 기능 (kaminari)의 결합 테스트 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/narimiya/items/53a956a265b99c58c309
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#投稿における結合テストの記述は省略
RSpec.describe 'ページネーションについて', type: :system do
before do
@definition = FactoryBot.create(:definition)
@definition_title = Faker::Lorem.sentence
@definition_body = Faker::Lorem.sentence
end
context 'ページネーションでページ遷移ができるとき' do
it 'ログインしたユーザーはページネーションでページ遷移ができる' do
# definitionを投稿したユーザーでログインする
sign_in(@definition.user)
# ①新規投稿する(投稿は3件表示のため4つ投稿を行う)
definition_up(@definition_title, @definition_body)
# ②新規投稿する(投稿は3件表示のため4つ投稿を行う)
definition_up(@definition_title, @definition_body)
# ③新規投稿する(投稿は3件表示のため4つ投稿を行う)
definition_up(@definition_title, @definition_body)
# ④新規投稿する(投稿は3件表示のため4つ投稿を行う)
definition_up(@definition_title, @definition_body)
# 投稿ページに移動する
visit root_path(anchor:"ethics")
# ページがあることを確認
expect(page).to have_css(".page-link")
# ページネーション'2'のボタンをクリックし、次ページへと行く
expect{ find_link('2', rel="next").click }
# ページ遷移していることを確認し、投稿があることを確認する
page_up(@definition)
# ページネーション'1'のボタンをクリックし前ページへと行く
expect{ find_link('1', rel="prev").click }
# ページ遷移していることを確認し、投稿があることを確認する
page_up(@definition)
# ページネーションボタン'最後'のボタンをクリックし、最後のページへと行く
expect{ find_link('最後', ".page-link").click }
# ページ遷移していることを確認し、投稿があることを確認する
page_up(@definition)
# ページネーションボタン'最初'のボタンをクリックし、最初のページへと行く
expect{ find_link('最初', ".page-link").click }
# ページ遷移していることを確認し、投稿があることを確認する
page_up(@definition)
end
end
end
Reference
이 문제에 관하여(Rails6] RSpec에 의한 페이지 네이션 기능 (kaminari)의 결합 테스트 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/narimiya/items/53a956a265b99c58c309텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)