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

Boas práticas usando RSpec

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for Cirdes Cirdes
September 15, 2012

Boas práticas usando RSpec

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

Avatar for Cirdes

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