Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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
  2. 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
  3. #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
  4. #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
  5. #USE LET  LET(:HOUSE)  {  FACTORY(:HOUSE)  }  #CORRECT  #WRONG  BEFORE  DO

       @HOUSE  =  FACTORY(:HOUSE)  END sábado, 15 de setembro de 12
  6. #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
  7. #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
  8. #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
  9. #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
  10. #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
  11. #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
  12. #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
  13. #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
  14. #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