2012-09-07 2 views
1

나는 좀 더 고급 질문이라고 생각하기 때문에 이것에 대한 경험이 많은/경험 많은 Ruby/Rails 개발자의 답을 찾고있을뿐입니다.테스트 (rspec)에서 다른 모델이 많이 있습니까? 고급

저는 AR 모델에 동작을 추가하는 작업을하고 있습니다. 많은 다른 연관성 (has_many, habtm, has_one 등)에 대해 테스트해야하며 여러 옵션이 연결 (예 : foreign_key)에 전달 될 때 동작을 테스트해야합니다. 이제는이 모든 다른 모델을 사용하여 데이터베이스에서 동일한 테이블을 사용할 수 있습니다. 필드 자체는 변경하지 않아도되고 has_many, belongs_to 등을 통해 지정된 동작 만 가능하기 때문입니다. 다양한 옵션이 있으므로 모델 수가 매우 많습니다.

우선 가독성을 위해 테스트 자체/모델 옆에 모델 정의를 포함하는 것이 좋지 않을 것이라고 생각합니다 (동일한 모델을 사용하는 테스트가 여러 개인 경우 함께 그룹화합니다. before 메소드 사용). 이것이 내 목표 중 하나입니다. 동의하지 않으면 의견을 말할 수 있습니다.

내가 잘 모르겠다는 점은 TaskWithManySubtasksAndForeignKey 대신에 "Task"와 같은 모든 테스트에서 모델의 단순/동일한 이름을 유지하려고한다는 것입니다. 문제는 의미 있고 간단한 이름을 찾기가 너무나 많은 모델이 있다는 것입니다. 나는 이것이 확실하지 않다. 같은 이름을 사용한다. 상수이기 때문에 조금 문제가있다. 프록시 클래스가있는 솔루션이 있지만 이것이 최적의 솔루션이라고 생각하지 않습니다. "taskModel"과 같은 변수를 사용하는 것을 고려하고 있었지만 약간 길고 특이한 것처럼 보였습니다.

마음에 떠오르는 다른 옵션 중 하나는 쉽게 들릴 수 있지만, 기존 연결을 제거한 다음 새 연결을 정의하는 것입니다. 그래서 예. has_many를 추가 한 다음 제거하고 habtm을 추가하십시오.

어떻게 하시겠습니까?

답변

1

spec 파일에서 고유 한 모델을 정의하는 것은 각 모델이 정의 된 방식을 쉽게 볼 수 있으므로 반드시 나쁜 생각은 아닙니다. 이 접근법의 명백한 문제점은 다른 테스트 파일에서 모델을 재사용하려는 경우입니다. 레일즈 접근 방식은 all the models in separate files을 정의한 다음 필요로하는 테스트에서만이를 요구합니다.

나는 그것이 실제로 얼마나 많은 모델을 가지고 있고 재사용하고 싶은지에 달려 있다고 생각한다. 내 보석 중 하나에서 defining the models in the spec file이라는 접근 방식을 사용했고 다른 보석에서는 spec helper에 정의했으며 또 다른 방식으로는 Rails 접근 방식을 사용하여 separate directory을 사용했습니다. 당신이 어떤 모델을 선호하는지 물어 본다면 모델을 포함하고있는 스펙을 다룰 수 있습니다. 확실히 주관적인 문제.

나는 경우에 찍은 또 다른 방법은 해당 시험의 삶을 위해 주위에 보장된다 익명 클래스를 만드는 것입니다 : 당신의 의견에 대한

describe 'my test' do 
    let(:my_class) do 
    Class.new(Task) do 
     has_many :things 
     belongs_to :something_else 
    end 
    end 

    it 'should have many things' do 
    my_class.should have(100).things 
    end 
end 
+0

덕분에, 거 이것을 받아 들일 :) – mrbrdo

관련 문제