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

해명해 주셔서 감사합니다.

좋은 웹페이지 즐겨찾기