2014-04-19 2 views
1

RSpec을 사용하여 테스트하는 동안 머리를 감싸려고합니다. 내가 겪고있는 문제 중 하나는 admin 네임 스페이스의 뷰를 테스트 할 때 render을 호출 할 때 RSpec이 부분을 찾도록하는 것입니다. RSpec에이보기가 admin에 있음을 알 수 맥락이 없기 때문에 내 생각,레일 스펙보기 : 이름 공간이 지정된보기에서 부분을 찾을 수 없습니다.

render @products 

그러나 :

기본적으로 내 vieww에, 나는 다음과 같이 사용 render 전화 축약 구문을 많이 가지고 네임 스페이스의 경우 app/views/admin/products/_product.html.erb에있는 부분을 찾을 수 없습니다. 나는 아주 짧은 구문에 부착하고있어, 당신도 알다시피,

render partial: 'admin/products/product', collection: @products 

그러나 : 사물이 작동을 얻으려면, 내가 좋아하는 뭔가를해야합니다. Rails 규칙을 따르는 것이 중요합니다. 그런 좋은 소년이되고 모든 것을 그 안에 넣어 주면 보상을받을 수 있습니다.

그렇다면 궁금한 점은 : 특정 RSpec 뷰 테스트에서 특정 네임 스페이스 내에서 뷰를 테스트하도록 지정하는 방법이 있습니까? 이 고통을 사라지게 할 골든 너겟이 있습니까?

답변

0

이것이 실제 RSpec 문제라고 생각되면 rspec-rails issues에 기록하십시오. 귀하의 일반적인 설명을 바탕으로, 이것은 레일 문제처럼 들리 네요.

보기에서 render @products을 사용하면 Rails가 partial을 렌더링하도록 지시합니다. 이는 컨트롤러 동작 내부의 render과 다릅니다.

당신에게 render @customerRails docs에 따르면 :

@customer 인스턴스 변수가 고객 모델의 인스턴스를 포함,이 그것을 렌더링하는 _customer.html.erb을 사용합니다.

이 부분은 생략하고 있습니다. _customer.html.erb의 경로입니다. 불행히도, 현재 문서는 당신을 사냥하게 만듭니다. collection 정보 아래에있는이 보석은 다음과 같습니다.

레일즈는 컬렉션의 모델 이름을보고 사용할 부분의 이름을 결정합니다. 사실, 이기종 컬렉션을 만들고이를 이렇게 렌더링 할 수도 있습니다. 레일스는 컬렉션의 각 구성원에 대해 적절한 부분을 선택할 것입니다.

본질적으로 이것이 의미하는 바는, 수행 할 때 render @customer,로드 시도 : app/views/customers/_customer.html.erb. 이미 설정 한 네임 스페이스가 아닙니다. 네임 스페이스를 사용하려면 모델이 이미 해당 네임 스페이스의 일부 (예 : Admin::Product)이거나 전체 부분 경로를 지정해야합니다 (이미 찾은 것처럼).

+0

답장을 보내 주셔서 감사합니다. 모든 것은 레일스에서 ​​예상대로 작동하고 문서화됩니다. Rails는 올바른 부분 렌더링을 찾는 데 아무런 문제가 없습니다. 올바른 부분을 찾을 수없는 RSpec보기 테스트입니다. –

+0

또한 마지막 단락과 반대로 ** 네임 스페이스 부분을 렌더링하기 위해 모델의 네임 스페이스를 지정하지 않아도됩니다 **; 컨트롤러의 네임 스페이스를 지정해야합니다. –