일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- programmingTip
- max중첩
- TIP
- RoR
- Rails
- java
- 점심영어스터디
- Linux
- fixture
- minitest
- apache spark
- carrierwave
- Ruby on Rails
- programming
- activerecord
- 삽질기
- Scala
- rubyonrails
- mysql
- uploader
- 전화영어
- share
- test
- Migration
- fileUploader
- Ruby
- transaction
- form
- Hadoop
- Shell
- Today
- Total
목록Ruby on Rails (3)
아침바라기의 이야기
비슷한 주제인 Mini test를 이용한 모델 테스트 팁은 이전에 한번 다뤘다. 주의점이 한가지 있다. Fixture는 개수가 많아지면 속도가 느려진다. 현재 DB의 데이터를 모두 지웠다가 Fixture 데이터를 넣고 테스트가 완료 되면 롤백한다. 이 과정을 진행하다보니 기존에 데이터가 많거나 Fixture 수가 늘어나면 늘어날수록 느려진다. 이걸 해결하려면 test_helper.rb에서 class ActiveSupport::TestCase fixtures :all 이 부분을 수정하는 것이 좋다. 각 테스트 케이스 setup 에서 fixture를 로딩하도록 만들거나 헬퍼를 통해서 필요한 것만 로딩하는 걸 만들어주도록 한다. Fixture는 YML 형태로 보통 사용한다아래는 예제다. # users.yml ..
주의) Active Record scope vs class method 원문 글과 거의 비슷합니다. 제가 이해 해보려고 요약해보는 내용입니다.-.-;; Active record에는 scope라는 개념이 있다. Active record로 DB에서 데이터를 조회할 때 조회 범위를 줄여준다거나 필터링 할때 주로 사용한다. 예를 들면, 블로그에서 발행된 포스트만 조회한다는 의미를 담고 있을때, Post.published 위와 같이 조회하도록 한다. 자 여기서 분명한 특징을 생각해보자. 조회 한걸 봤을때 클래스 메소드가 아닐까? 일종의 클래스 메소드가 맞다. 다만 클래스 메소드처럼 클래스가 로드 되는 시점에 블록을 평가하는 형태가 하나, 호출되는 시점에 블록을 평가하는 형태 두가지가 있다.
mini 테스트는 Fixture를 사용한다. 즉 DB를 이용해서 테스트를 하는데 test case마다 한번 전체 테이블의 데이터를 지우고 Fixture를 한번 로딩하는 반복을 이용한다. mini test에서는 test case 마다 transaction의 begin, rollback 을 사용한다. 대부분 DB(MS SQL 빼고)에서 중첩 transaction을 지원하지 않으므로 테스트 케이스 테스트 중에 오류가 발생할 수 있다. 트랜잭션이 걸려 있는 경우, 1. transaction을 스킵하는 기능을 만듬2. AOP를 적용 3. transaction을 사용하지 않는다.4. helper class를 통해서 테스트 범위 밖으로 밀어버린다. 위의 4가지 방법을 이용해서 트랜잭션 중첩을 회피 해야한다. fixt..