$30 off During Our Annual Pro Sale. View Details »

Boas práticas usando RSpec

Cirdes
September 15, 2012

Boas práticas usando RSpec

Apresentação sobre teste no 7 Encontro do Frevo on Rails

Cirdes

September 15, 2012
Tweet

More Decks by Cirdes

Other Decks in Technology

Transcript

  1. BOAS PRÁTICAS USANDO
    RSPEC
    COMO O EVENTICK EVOLUIU SEU CÓDIGO DE TESTE
    CIRDES HENRIQUE
    15/09/2012
    sábado, 15 de setembro de 12

    View Slide

  2. DO QUE PRECISAMOS?
    POR QUE?
    COMO?
    ONDE?
    QUEM?
    sábado, 15 de setembro de 12

    View Slide

  3. FERRAMENTAS A NOSSA
    DISPOSIÇÃO
    minitest
    sábado, 15 de setembro de 12

    View Slide

  4. MAIS FERRAMENTAS
    sábado, 15 de setembro de 12

    View Slide

  5. MUITOS OPÇÕES
    sábado, 15 de setembro de 12

    View Slide

  6. WTF??
    sábado, 15 de setembro de 12

    View Slide

  7. FINALMENTE ACHAMOS A SOLUÇÃO
    426 PÁGINAS SOBRE RSPEC
    EXCELENTE FONTE TEÓRICA
    TESTE DE VIEWS
    TESTE DE CONTROLLERS
    TESTE DE MODELOS
    sábado, 15 de setembro de 12

    View Slide

  8. TESTES DE MODELO
    sábado, 15 de setembro de 12

    View Slide

  9. TESTE DE CONTROLE
    sábado, 15 de setembro de 12

    View Slide

  10. SEMPRE MELHORANDO!!
    sábado, 15 de setembro de 12

    View Slide

  11. #USE MOCKS APENAS QUANDO
    NECESSÁRIO
     CONTEXT  "WHEN  NOT  FOUND"
     #  SIMULATE  A  NOT  FOUND  RESOURCE
     RESOURCE.STUB(:WHERE).WITH(:CREATED_FROM  
    =>  PARAMS[:ID]).AND_RETURN(FALSE)
     BEFORE(:EACH)  DO
     END
     ...
     IT  {  SHOULD  RESPOND_WITH  404  }
     END
    sábado, 15 de setembro de 12

    View Slide

  12. #FIXTURES NÃO! FACTORIES
     USER  =  FACTORY.CREATE(:USER)
     #CORRECT
     #WRONG
     USER  =  USER.CREATE(  :NAME  =>  "GENOVEFFA",
                                             :SURNAME  =>  "PICCOLINA",
                                             :CITY  =>  "BILLYVILLE",
                                             :ACTIVE  =>  TRUE)
    sábado, 15 de setembro de 12

    View Slide

  13. #USE LET
     LET(:HOUSE)  {  FACTORY(:HOUSE)  }
     #CORRECT
     #WRONG
     BEFORE  DO
       @HOUSE  =  FACTORY(:HOUSE)
     END
    sábado, 15 de setembro de 12

    View Slide

  14. #DRY COM SUBJECT
     SUBJECT  {  ASSIGNS("MESSAGE")  }
     #CORRECT
     #WRONG
     IT{ASSIGNS("MESSAGE").SHOULD  MATCH  /RESOURCE  NAME/  }
     IT{ASSIGNS("MESSAGE").SHOULD  MATCH  /BORN  IN  CRATO/}
     IT{ASSIGNS("MESSAGE").CREATOR.SHOULD  MATCH  /ERNEST/
     IT  {  SHOULD  MATCH  /BORN  IN  CRATO/}
     IT  {  SHOULD  MATCH  /BORN  IN  CRATO/}
    sábado, 15 de setembro de 12

    View Slide

  15. #RSPEC PATTERN
     LET(:CAR)  {  FACTORYGIRL.CREATE(:CAR,  CAR_ATTRIBUTES)}
     LET(:CAR_ATTRIBUTES)    {  {}  }
     DESCRIBE  "#TO_S"
       SUBJECT  {  CAR.TO_S  }
       LET(:CAR_ATTRIBUTES)  {  {NAME:  "BATMOVEL"}  }
       IT  {  SHOULD  ==  "BATMOVEL"  }
     END
    sábado, 15 de setembro de 12

    View Slide

  16. #SHARED EXAMPLES
     SHARED_EXAMPLES_FOR  "FINDING  EVENT"  DO
       IT  "ASSIGNS  EVENT"  DO
         ASSIGNS(:EVENT).SHOULD  ==  @EVENT
       END
     IT_SHOULD_BEHAVE_LIKE  "FINDING  EVENT"
     END
    sábado, 15 de setembro de 12

    View Slide

  17. #DRY COM SUBJECT
     SUBJECT  {  ASSIGNS("MESSAGE")  }
     #CORRECT
     #WRONG
     IT{ASSIGNS("MESSAGE").SHOULD  MATCH  /RESOURCE  NAME/  }
     IT{ASSIGNS("MESSAGE").SHOULD  MATCH  /BORN  IN  CRATO/}
     IT{ASSIGNS("MESSAGE").CREATOR.SHOULD  MATCH  /ERNEST/
     IT  {  SHOULD  MATCH  /BORN  IN  CRATO/}
     IT  {  SHOULD  MATCH  /BORN  IN  CRATO/}
    sábado, 15 de setembro de 12

    View Slide

  18. #USE DO ACTION
     #WRONG
     POST(:CREATE,:NAME  =>  "RESOURCE  NAME",
    :SCOPE  =>  "HTTP://EVEN.TC/SCOPE",
    :TYPE  =>  "HTTP://EVEN.TC/TYPE",
    :FORMAT  =>  "JSON")
    sábado, 15 de setembro de 12

    View Slide

  19. #USE DO ACTION
     #CORRECT
     DO_ACTION(:NAME  =>  "ANOTHER  NAME")
     DO_ACTION  DEFINITION
     DEF  DO_ACTION(OPTIONS  =  {})
       ATTRIBUTES  =  {:NAME  =>  "RESOURCE  NAME",
    :SCOPE  =>  "EVEN.TC/SCOPE"}
       ATTRIBUTES.MERGE!(OPTIONS.SYMBOLIZE_KEYS!)
       POST  :CREATE,  ATTRIBUTES
     END
    sábado, 15 de setembro de 12

    View Slide

  20. #USE CONTEXTOS
    CONTEXT  "WHEN  LOGGED  IN"  DO
    #CORRECT
    #WRONG
    IT  "SHOULD  HAVE  200  STATUS  CODE  IF  LOGGED  IN"  DO
     RESPONSE.SHOULD  RESPOND_WITH  200
     IT  {  SHOULD  RESPOND_WITH  200  }
    END
    END
    sábado, 15 de setembro de 12

    View Slide

  21. #USE DESCRIÇÕES CURTAS
    CONTEXT  "WHEN  NOT  VALID"
     #CORRECT
     #WRONG
    IT  "SHOULD  HAVE  422  STATUS  CODE  IF  AN  UNEXPECTED  PARAMS  
    WILL  BE  ADDED"  DO
     IT  {  SHOULD  RESPOND_WITH  200  }
    END
    sábado, 15 de setembro de 12

    View Slide

  22. #UM TESTE POR IT
    IT  {  SHOULD  RESPOND_WITH_CONTENT_TYPE(:JSON)  }
     #CORRECT
     #WRONG
    IT  "SHOULD  CREATE  A  RESOURCE"  DO
    IT  {  SHOULD  ASSIGN_TO(:RESOURCE)  }
     RESPONSE.SHOULD  RESPOND_WITH_CONTENT_TYPE(:JSON)
     RESPONSE.SHOULD  ASSIGN_TO(:RESOURCE)
    END
    sábado, 15 de setembro de 12

    View Slide

  23. RERÊNCIAS
    HTTP://WWW.SLIDESHARE.NET/ANDREA.REGINATO/RSPEC-­‐2-­‐BEST-­‐
    PRACTICES
    THE  RSPEC  BOOK
    HTTP://MARAKANA.COM/S/
    TECHTV_VIDEO_SERIES_EFFICIENT_RAILS_TEST_DRIVEN_DEVELOP
    MENT_CLASS_1_OF_6,191/INDEX.HTML
    HTTP://BLOG.CARBONFIVE.COM/2010/10/21/RSPEC-­‐BEST-­‐
    PRACTICES/
    HTTP://BLOG.THEFRONTIERGROUP.COM.AU/2012/06/MY-­‐NEW-­‐
    FAVOURITE-­‐RSPEC-­‐PATTERN/
    sábado, 15 de setembro de 12

    View Slide

  24. E ISSO É TUDO PESSOAL!
    CIRDES HENRIQUE
    @CIRDESBHF
    [email protected]
    sábado, 15 de setembro de 12

    View Slide