지원 모듈을 사용하여 결합 테스트의 가독성을 향상시키는 방법
개요
지원 모듈을 도입하는 방법에 대한 기사입니다.
도입 절차의 전체 이미지
①지원 모듈용 디렉토리와 파일을 수동으로 작성
② 서포트 모듈의 내용을 기술
③ 서포트 모듈을 읽을 수 있도록 한다
④ 결합 테스트 코드 편집
①지원 모듈용 디렉토리와 파일을 수동으로 작성
spec 디렉토리 아래에 support 디렉토리를 만들고 그 아래에 ~_support.rb를 만듭니다. (~의 부분은 임의)
② 서포트 모듈의 내용을 기술
(예) 투고에 있어서의 기술을 모듈화하고 있습니다.
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
③ 서포트 모듈을 읽을 수 있도록 한다
ir[Rails.root.join('spec', 'support', '*', '.rb')].sort.each { |f| .
spec/rails_helper.rb# This file is copied to spec/ when you run 'rails generate rspec:install'
require 'spec_helper'
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../config/environment', __dir__)
# Prevent database truncation if the environment is production
abort("The Rails environment is running in production mode!") if Rails.env.production?
require 'rspec/rails'
# Add additional requires below this line. Rails is not loaded until this point!
# Requires supporting ruby files with custom matchers and macros, etc, in
# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
# run as spec files by default. This means that files in spec/support that end
# in _spec.rb will both be required and run as specs, causing the specs to be
# run twice. It is recommended that you do not name files matching this glob to
# end with _spec.rb. You can configure this pattern with the --pattern
# option on the command line or in ~/.rspec, .rspec or `.rspec-local`.
#
# The following line is provided for convenience purposes. It has the downside
# of increasing the boot-up time by auto-requiring all files in the support
# directory. Alternatively, in the individual `*_spec.rb` files, manually
# require only the support files necessary.
#
Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f }
그런 다음 같은 파일의 RSpec.configure에 다음과 같이 모듈 이름을 지정합니다.
spec/rails_helper.rbRSpec.configure do |config|
config.include SignInSupport
config.include DefinitionUpSupport
config.include ReviewUpSupport
config.include PageUpSupport
# 順次追記していきます
④ 결합 테스트 코드 편집
다음과 같이 설명을 바꾸고 중복된 코드를 함께 쓰면 가독성이 향상됩니다.
spec/system/definitions_spec.rbrequire 'rails_helper'
RSpec.describe "Definitions", type: :system do
before do
@user = FactoryBot.create(:user)
@definition_title = Faker::Lorem.sentence
@definition_body = Faker::Lorem.sentence
end
context '投稿ができるとき'do
it 'ログインしたユーザーは新規投稿できる' do
# ログインする
sign_in(@user)
# 新規投稿する
definition_up(@definition_title, @definition_body)
# トップページに遷移する
visit root_path
# トップページには先ほど投稿した内容の投稿が存在することを確認する
expect(page).to have_content(@definition_title)
end
end
context '投稿ができないとき'do
it 'ログインしていないと新規投稿ページに遷移できない' do
# トップページに遷移する
visit root_path
# 新規投稿ページへのリンクがない
expect(page).to have_no_content('投稿')
end
end
end
지원 모듈이란?
메소드 등을 정리하는 기능(RSpec에 탑재)
메소드로서 처리를 정리할 수 있어, 복수회 사용하는 메소드를 정의하고 있습니다.
spec/rails_helper.rb에서 주석 처리하는 의미
올바른 RSpec 내에서는 공통화된 부분을 불러일으키는 제한이 있다. 제한을 제거해야 합니다.
여기에서는 라우팅을 확장하는 설정을 하고 있다. spec 디렉토리 안의, support 디렉토리 안의, **(모든 파일)안의, .rb만 붙은 전부의 파일이 대상이 되고 있습니다.
왼쪽에서 오른쪽으로 갈수록 파일이 깊어지는 이미지입니다.
spec/rails_helper.rb 정보
config 파일에서 SignSupport를 설정에 포함시켜 파일을 확장하고 있다는 설정을 하고 있습니다. 파일에 관해서 확장한 내용을 기술하고 있다고 하는 것입니다.
동일한 처리를 반복할 때 1개로 정리할 때 지원 모듈을 사용합니다.
Rails의 이념으로 반복해서 같은 설명을 해서는 안되는 규칙이 있기 때문입니다.
이상입니다.
Reference
이 문제에 관하여(지원 모듈을 사용하여 결합 테스트의 가독성을 향상시키는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/narimiya/items/b897db14551191e41fb2
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
①지원 모듈용 디렉토리와 파일을 수동으로 작성
② 서포트 모듈의 내용을 기술
③ 서포트 모듈을 읽을 수 있도록 한다
④ 결합 테스트 코드 편집
①지원 모듈용 디렉토리와 파일을 수동으로 작성
spec 디렉토리 아래에 support 디렉토리를 만들고 그 아래에 ~_support.rb를 만듭니다. (~의 부분은 임의)
② 서포트 모듈의 내용을 기술
(예) 투고에 있어서의 기술을 모듈화하고 있습니다.
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
③ 서포트 모듈을 읽을 수 있도록 한다
ir[Rails.root.join('spec', 'support', '*', '.rb')].sort.each { |f| .
spec/rails_helper.rb
# This file is copied to spec/ when you run 'rails generate rspec:install'
require 'spec_helper'
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../config/environment', __dir__)
# Prevent database truncation if the environment is production
abort("The Rails environment is running in production mode!") if Rails.env.production?
require 'rspec/rails'
# Add additional requires below this line. Rails is not loaded until this point!
# Requires supporting ruby files with custom matchers and macros, etc, in
# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
# run as spec files by default. This means that files in spec/support that end
# in _spec.rb will both be required and run as specs, causing the specs to be
# run twice. It is recommended that you do not name files matching this glob to
# end with _spec.rb. You can configure this pattern with the --pattern
# option on the command line or in ~/.rspec, .rspec or `.rspec-local`.
#
# The following line is provided for convenience purposes. It has the downside
# of increasing the boot-up time by auto-requiring all files in the support
# directory. Alternatively, in the individual `*_spec.rb` files, manually
# require only the support files necessary.
#
Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f }
그런 다음 같은 파일의 RSpec.configure에 다음과 같이 모듈 이름을 지정합니다.
spec/rails_helper.rb
RSpec.configure do |config|
config.include SignInSupport
config.include DefinitionUpSupport
config.include ReviewUpSupport
config.include PageUpSupport
# 順次追記していきます
④ 결합 테스트 코드 편집
다음과 같이 설명을 바꾸고 중복된 코드를 함께 쓰면 가독성이 향상됩니다.
spec/system/definitions_spec.rb
require 'rails_helper'
RSpec.describe "Definitions", type: :system do
before do
@user = FactoryBot.create(:user)
@definition_title = Faker::Lorem.sentence
@definition_body = Faker::Lorem.sentence
end
context '投稿ができるとき'do
it 'ログインしたユーザーは新規投稿できる' do
# ログインする
sign_in(@user)
# 新規投稿する
definition_up(@definition_title, @definition_body)
# トップページに遷移する
visit root_path
# トップページには先ほど投稿した内容の投稿が存在することを確認する
expect(page).to have_content(@definition_title)
end
end
context '投稿ができないとき'do
it 'ログインしていないと新規投稿ページに遷移できない' do
# トップページに遷移する
visit root_path
# 新規投稿ページへのリンクがない
expect(page).to have_no_content('投稿')
end
end
end
지원 모듈이란?
메소드 등을 정리하는 기능(RSpec에 탑재)
메소드로서 처리를 정리할 수 있어, 복수회 사용하는 메소드를 정의하고 있습니다.
spec/rails_helper.rb에서 주석 처리하는 의미
올바른 RSpec 내에서는 공통화된 부분을 불러일으키는 제한이 있다. 제한을 제거해야 합니다.
여기에서는 라우팅을 확장하는 설정을 하고 있다. spec 디렉토리 안의, support 디렉토리 안의, **(모든 파일)안의, .rb만 붙은 전부의 파일이 대상이 되고 있습니다.
왼쪽에서 오른쪽으로 갈수록 파일이 깊어지는 이미지입니다.
spec/rails_helper.rb 정보
config 파일에서 SignSupport를 설정에 포함시켜 파일을 확장하고 있다는 설정을 하고 있습니다. 파일에 관해서 확장한 내용을 기술하고 있다고 하는 것입니다.
동일한 처리를 반복할 때 1개로 정리할 때 지원 모듈을 사용합니다.
Rails의 이념으로 반복해서 같은 설명을 해서는 안되는 규칙이 있기 때문입니다.
이상입니다.
Reference
이 문제에 관하여(지원 모듈을 사용하여 결합 테스트의 가독성을 향상시키는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/narimiya/items/b897db14551191e41fb2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)