일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- RoR
- fixture
- Hadoop
- apache spark
- Migration
- test
- java
- rubyonrails
- max중첩
- Scala
- fileUploader
- 점심영어스터디
- Linux
- programming
- Ruby on Rails
- transaction
- share
- Shell
- TIP
- mysql
- 삽질기
- form
- activerecord
- Ruby
- programmingTip
- carrierwave
- Rails
- minitest
- 전화영어
- uploader
- Today
- Total
목록fixture (3)
아침바라기의 이야기
모델에 관계 설정은 없고, id 값을 가져다 써야할 땐 어떻게 할까? 이럴땐 ActiveRecord::FixtureSet.identify() 를 사용할 수 있다. Fixture의 label로 레일즈가 어떤 id를 넣었는지 알수 있다. 아래 처럼 사용하면 된다. # users.yml daniel: name: Daniel job_id:
비슷한 주제인 Mini test를 이용한 모델 테스트 팁은 이전에 한번 다뤘다. 주의점이 한가지 있다. Fixture는 개수가 많아지면 속도가 느려진다. 현재 DB의 데이터를 모두 지웠다가 Fixture 데이터를 넣고 테스트가 완료 되면 롤백한다. 이 과정을 진행하다보니 기존에 데이터가 많거나 Fixture 수가 늘어나면 늘어날수록 느려진다. 이걸 해결하려면 test_helper.rb에서 class ActiveSupport::TestCase fixtures :all 이 부분을 수정하는 것이 좋다. 각 테스트 케이스 setup 에서 fixture를 로딩하도록 만들거나 헬퍼를 통해서 필요한 것만 로딩하는 걸 만들어주도록 한다. Fixture는 YML 형태로 보통 사용한다아래는 예제다. # users.yml ..
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..