Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 오브젝트 풀링
- LookRotation
- 유니티 시야 가림
- 깊이 우선 탐색
- 소스코드 줄번호
- Quaternion.Euler
- eulerAngles
- LFS
- LayerMask
- 유니티 머신러닝
- c++
- 유니티 Collision
- unity
- InputManager
- 유니티 오브젝트 풀링
- 이진트리
- 유니티
- 유니티 Vector3
- 유니티 Rotate
- 알고스팟
- 유니티 InputManager
- 유니티 ResourceManager
- ML-Agents
- c++ 문자열 자르기
- Mathf.Clamp
- 유니티 리소스매니저
- Raycast
- 코드블럭 테마
- 너비 우선 탐색
- git-lfs
Archives
- Today
- Total
무민은귀여워
[Ruby on rails] 테스트 본문
반응형
테스트
※ 퍼펙트 루비온 레일즈 ( Ruby On Rails 5アプリケーションプログラミング)8장 요약
애플리케이션의 규모가 커지면, 테스트를 위해 많은 비용(인력과 시간)이 필요하다.
그래서 최근 애플리케이션 개발에서는 테스트를 위한 스크립트를 만들어서 테스트를 자동화하는 것이 일반적.
rails가 지원하는 테스트의 종류
- Unit 테스트
- Functional 테스트
- Integration 테스트
테스트 데이터베이스의 구축 및 준비
1 | rails db:migrate RAILS_ENV=test | cs |
1 | rails db:drop RAILS_ENV=test DISABLE_DATABASE_ENVIRONMENT_CHECK=1 | cs |
Unit 테스트
Unit 테스트(단위 테스트)는 애플리케이션을 구성하고 있는 라이브러리(주요 모델 등)가 제대로 작동하는지 확인하는 테스트이다.
-----------------------
test 메서드
-----------------------
test name do
assertion
end
-----------------------
name : 테스트 이름
assertion : 테스트 코드
-----------------------
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | require 'test_helper' class BookTest < ActiveSupport::TestCase test "book save" do book = Book.new({ isbn: '978-4-7741-4466-X', title: 'Ruby on Rails本格入門', price: 3100, publish: '技術評論社', published: '2017-02-14', dl: false }) assert book.save, 'Failed to save' end | cs |
assert 메서드는 첫 번째 매개 변수 (save 메서드의 리턴 값)가 true일 경우 테스트가 성공했다는 것을 의미.
두 번째 매개 변수는 테스트가 실패했을 때 출력할 글자.
모델 유효성 결과 확인
모델에서 정의한 유효성 검사의 동작을 확인하는 것도 가능
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | test "book validate" do book = Book.new({ isbn: '978-4-7741-44', title: 'Ruby on Rails本格入門', price: 3100, publish: '技術評論社', published: '2017-02-14', dl: false }) assert !book.save, 'Failed to validate' assert_equal book.errors.size, 2, 'Failed to validate count' assert book.errors[:isbn].any?, 'Failed to isbn validate' end | cs |
book validate는 세 종류의 Assertion을 실행한다.
- 유효성 검사를 통과하지 못해, 저장에 실패했을 경우
- 두 개의 유효성 검사가 있을 경우
- isbn 필드의 유효성 검사 오류가 적어도 한 개 이상 있을 경우
모델을 통해 검색한 결과를 확인
1 2 3 4 5 6 7 | test "where method test" do result = Book.find_by(title: '改訂新版JavaScript本格入門') assert_instance_of Book, result ,'result is not instance of Book' assert_equal books(:modernjs).isbn, result.isbn, 'isbn column is wrong.' assert_equal Date.new(2016, 9, 30), result.published, 'published column is wrong.' end | cs |
- 추출한 결과가 Book 객체인지 확인
- isbn 필드가 픽스처 books.yml 에 있는 :modrnjs 키의 isbn 필드와 같은지 확인
- publish 필드가 2016/09/30 인지 확인
뷰 헬퍼 테스트
1 2 3 4 5 6 7 | require 'test_helper' class ViewHelperTest < ActionView::TestCase test "format helper" do result = format_datetime(Time.now, :date) assert_match /\d{4}年\d{1,2}月\d{1,2}日/, result end end | cs |
format helper 테스트는 format_datetime 메서드의 리턴 값이 9999년 99월 99일의 형식인지 정규 표현식으로 확인한다.
Functional 테스트
컨트롤러(액션)의 동작 또는 템플릿의 출력을 확인하기 위한 테스트
-----------------------
get 메서드
-----------------------
get(action [,params [session [,flash]]])
-----------------------
action : 실행할 액션
params : 실행 시에 함께 전달할 매개 변수
session : 실행 시에 이용할 세션 정보
flash : 실행 시에 사용할 플래시 정보
-----------------------
1 2 3 4 5 6 7 8 9 10 | require 'test_helper' class HelloControllerTest < ActionDispatch::IntegrationTest test "list action" do get '/hello/list' assert_equal 10, assigns(:books).length, 'found rows is wrong.' assert_response :success, 'list action failed.' assert_template 'hello/list' end | cs |
라우팅 동작 확인 - assert_generates 메서드
1 2 3 4 | test "routing check" do assert_generates('hello/list', { controller: 'hello', action: 'list' }) # assert_recognizes({ controller: 'hello', action: 'list' }, 'hello/list') end | cs |
템플릿 출력 결과 확인 - assert_select
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | test "select check" do get '/hello/list' assert_select 'title' assert_select 'title', true assert_select 'font', false assert_select 'title', 'Railbook' assert_select 'script[data-turbolinks-track=?]', 'reload' assert_select 'title', /[A-Za-z0-9]+/ assert_select 'table tr[style]', 10 assert_select 'table' do assert_select 'tr[style]', 1..10 end assert_select 'title', { count: 1, text: 'Railbook' } end | cs |
Integration 테스트
통합 테스트라고도 부른다. 여러 개의 컨트롤러를 넘나들며 실제 사용자의 행동을 모방할 때 사용한다.
예 ) 로그인 기능
- hello#view 액션에 접근
- 미인증 상태이므로, login#index 액션(로그인 페이지)로 리다이렉트
- 로그인 페이지에서 사용자 이름과 비밀번호를 입력하고 인증 처리
- login#auth 액션에서 인증 처리가 완료되면 hello#view 액션으로 리다이렉트
테스트 스크립트 생성
1 | rails generate integration_test admin_login | cs |
테스트 스크립트 작성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | require 'test_helper' class AdminLoginTest < ActionDispatch::IntegrationTest test "login test" do get '/hello/view' assert_response :redirect assert_redirected_to controller: :login, action: :index assert_equal '/hello/view', flash[:referer] follow_redirect! assert_response :success assert_equal '/hello/view', flash[:referer] post '/login/auth', params: { username: 'yyamada', password: '12345', referer: '/hello/view' } assert_response :redirect assert_redirected_to controller: :hello, action: :view assert_equal users(:yyamada).id, session[:usr] follow_redirect! assert_response :success end end | cs |
테스트 실행
1 | rails test test/integration/admin_login_test.rb | cs |
반응형
'IT > 기타' 카테고리의 다른 글
메모) php 코딩 규약 (0) | 2018.11.26 |
---|---|
[Ruby on rails] 테이블 관리 1:1, 1:n, m:n 관계 (0) | 2018.11.04 |
memo) yarn 관련 메모 (0) | 2018.10.13 |
memo) Module build failed: TypeError: Cannot read property 'eslint' of undefined (0) | 2018.10.08 |
memo) ruby , rails 설치 (0) | 2018.10.08 |
Comments