2013-02-11 3 views
1
적절한 뷰를 호출하면 내가보기 데코레이터가 제대로
  • 를 작동하는 경우

    도발 한 장고 응용 프로그램의 장식은

    • 을 테스트 할

    그래서, 여기 features이 장식 get_object 및 뷰의 myapp.views.

    @get_object 
    def features(request, object): 
        return {} 
    

    나는이 조롱하려고 : 내가 있었어야 생각하지만

    new_view = Mock(__name__='features', return_value={}) 
    decorated = get_object(new_view) 
    
    with patch('myapp.views.features') as features: 
        features = decorated 
        client = Client() 
        response = client.get('/features') 
        print new_view.call_args 
    

    이, mock 객체가 호출되지 않은 것처럼, 아무것도 표시되지 않습니다.

    데코 레이팅 된보기를 올바르게 모의 표시하려면 어떻게해야합니까?

  • 답변

    1

    patch으로 전화하면보기가 새로운 MagicMock으로 바뀝니다. 수동으로 모의을 구성하고 있기 때문에 당신은 당신이 (안된)처럼 더 뭔가해야 뷰 :

    new_view = Mock(__name__='features', return_value={}) 
    features = get_object(new_view) 
    
    with patch('myapp.views.features', features): 
        client = Client() 
        response = client.get('/features') 
        print new_view.call_args 
    

    이 모의 압연 손으로 myapp.views.features를 대체합니다.

    일반적으로 장고 테스트 클라이언트를 사용하지 않고 장식자를 분리하여 테스트하는 것이 좋습니다. 여기에 두 가지 테스트를 실제로 혼합합니다. 첫 번째는 데코레이터가 의무를 이행하는지 확인하고 다른 하나는 요청이 올바르게 라우팅되는지 확인합니다.

    관련 문제