Rspec을 사용하여 인스턴스 변수에 값을 부여하는 문제를 테스트합니다(2)
3182 단어 cancan
묘사
우선 좋은 권한 수여 도구라서 사용하기에 정말 즐겁습니다.그러나 내가 겪은 작은 문제는 컨트롤러가 실례 변수에 대한 테스트를 하는 데 있어서rspec2 (아직 rspec1을 시도하지 않은 것) 와 잘 맞지 않는 것 같다는 것이다.
Rspec에서 받은 "assigns"산열은 "load 및 authorize resource"에서 출력된 것 같지만, 호출된 방법에서 분배된 다른 실례 변수가 없습니다.
그러나 그것은 실천에서 확실히 잘 작동하고 있다. 이것은 단지 테스트 문제일 뿐이다.
"load and authorize resource"를 삭제하면 즉시 할당 값에서 누락된 변수를 볼 수 있습니다.
토론 #1
단지 문제는 권한 수여!방법은 컨트롤러 레벨에서만 load resource를 실행하면 정상적으로 작동할 수 있습니다.나는 이미 너의 코드를 보았지만, 문제의 어떤 뚜렷한 원인도 알아낼 수 없다. 만약 내가 해결 방안을 찾게 된다면, 나는 너에게 알려줄 것이다.
토론 #2
듣기CanCan::AccessDenied
이상은 authorize!
에 의해 발생하기 때문에 컨트롤러 조작은 다른 실례 변수를 설정하기 위해 실행되지 않습니다.여기서 무슨 일이 있었는지 알아?토론 #셋
이번 방송을 끝냅니다. 왜냐하면 나는 아직 이 문제에 관한 다른 보도를 듣지 못했기 때문입니다.아마도 최신 버전의 Rspec 2에서 수정되었을 것입니다.만약 문제가 여전히 존재한다면, 여기에 평론을 추가하십시오. 저는 더욱 연구할 것입니다.토론 #4
이 일을 잊어버려서 미안해요.당시 Rails3, Rspec2와 CanCan을 처음 사용한 것은 너무 많은 새로운 것들이 있었고, 잘못된 결론을 내린 것 같다고 생각한다.
고맙습니다.
토론 #5
안녕하세요.표준rspec 프레임워크 테스트 테스트 컨트롤러의 생성과 제거 방법을 사용할 때 이 문제에 부딪혔습니다.
Rails 3.0.0, Authlogic 2.1.6, cancan 1.4.0 및 Rspec 2.0.1 사용
도와줄 사람 있어요?
고마워요 고마워요
제임스
토론 #6
이 표를 다시 열겠습니다@jamescumming, 당신은 잘못이 무엇인지 더욱 구체적으로 설명할 수 있습니까?토론 #7
라이언다음은 제가 받은 코드와 실패 메시지입니다.
예1
'후기 창설'이 어떻게 됐는지 묘사해 주세요.
잘못된 매개변수가 있는 동작을 설명합니다.
"새로 생성되었지만 저장되지 않은 거래 주문서를 @trade order로 할당"
사용자 세션.생성(사용자(:adminuser))
무역 주문서.스텁(: 신규).사용({this'=>params'}) {mock trade order(:save=>false)}
post:create,:trade_order=>{'this'=>'params'}
분배(: 거래 주문서).아마 (아날로그 거래 주문서)
끝맺다
끝맺다
끝맺다
결과 1
5) 유효하지 않은 매개변수가 있는 TradeOrders Controller 사후 생성 새로 생성되었지만 저장되지 않은 Trade 주문을 @trade order로 지정
실패/오류:post:create,:trade order=>{'this'=>'params'}
받음: 예기치 않은 매개변수가 있는 새
: ({"this"=>"params"})
획득: (args 없음)
# ./규격/컨트롤러/무역 주문\u 컨트롤러\u 규격rb:65
예2
'후기 창설'이 어떻게 됐는지 묘사해 주세요.
describe "with valid params" do
it "assigns a newly created trade_order as @trade_order" do
TradeOrder.stub(:new).with({'these' => 'params'}) { mock_trade_order(:save => true) }
post :create, :trade_order => {'these' => 'params'}
assigns(:trade_order).should be(mock_trade_order)
end
end
끝맺다결과 2
3) TradeOrders Controller가 유효한 매개 변수를 사용한 후 새로 만든trade 주문서를 @trade order로 지정하기
실패/오류:post:create,:trade order=>{'this'=>'params'}
받음: 예기치 않은 매개변수가 있는 새
: ({"this"=>"params"})
획득: (args 없음)
# ./규격/컨트롤러/무역 주문\u 컨트롤러\u규격rb:49
고마워. 이거 봐.
겸사겸사 한마디 하자면, 위대한 철도 전문가들, 나는 항상 그들이 매우 유용하다고 생각한다.
토론 #8
@jamescumming, 당신들의 상세한 회답에 감사 드립니다.문제는 CanCan이 매개 변수를new
방법에 직접 전달할 수 없기 때문에 mock이 작동하지 않는다는 것이다.#176의 반복이기 때문에 닫습니다.토론 #9
해명해 주셔서 감사합니다.Reference
이 문제에 관하여(Rspec을 사용하여 인스턴스 변수에 값을 부여하는 문제를 테스트합니다(2)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://github.com/ryanb/cancan/issues/67텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)