2017-02-08 15 views
0

(이 질문은 어떤 광범위하게-핑 API를 스텁에 일반화된다 생각하지만 실제로 함께 일하고 있어요 코드를 기반으로 질문을 부탁 해요) 우리는 우리의 컨트롤러와 뷰에 광범위하게 Contentful Model을 사용하고기능 사양의 Contentful Model 인스턴스를 스텁하는 좋은 방법은 무엇입니까?

우리의 레이아웃을 포함하여.

class HomepageController < ApplicationController 
    def homepage 
    # ... other stuff 
    @homepage_content = Homepage.find ('contentful_entry_id') 
    end 
end 

... 홈페이지 ContentfulModel :: 자료의 서브 클래스이며, @homepage_content 것 : 이것은 우리가 (말) 홈페이지를 방문하고있는 모든 기능 시험에서, 우리의 컨트롤러 액션이 같은 것을 포함된다는 것을 의미합니다 보기에서 여러 통화를합니다 (때로는 연결됨). 바닥 글에는 비슷한 인스턴스 변수가 설정되어 반복적으로 사용됩니다.

기능 테스트를 위해 이것은 고통입니다. 난 단지 두 가지 옵션을 마련했습니다

  1. 스텁 모든 단일 호출 (수십) 모든 Contentful 모델 인스턴스에, 그리고 두 스텁 방법 체인을하거나 반환 할 수 있도록 적절한 모의

또는

  1. 를 사용하여 모든 기능 사양이 두

의 Contentful 응답을 저장하는 VCR과 같은 보석 (적어도 방법은 내가하고있어 m)은 꽤 나쁜 단점을 가지고 있습니다 :

1) 우리가 관련 모델에서 필드를 추가하거나 제거 할 때마다 업데이트되어야하는 테스트 kruft의 묶음으로 이어집니다. 우리는 우리가

암을 전송 요청을 바꿀 것 테스트의 요소를 변경할 때마다 관련 YML 파일을 취소 기억할 필요가 있고 -

2) 우리는 모든 기능 테스트를위한 VCR의 YAML 파일을 생성 의미 세 번째 옵션이 없습니까? 또는 주요 단점을 갖지 않고 위의 옵션 중 하나를 수행하는 합리적인 방법이 있습니까?

답변

3

저는 contentful_model의 관리자입니다.

우리는 VCR을 사용하여 API 호출을 스텁링하므로 실제 데이터로 테스트하고 복잡한 테스트 코드를 피할 수 있습니다.

건배