Share
Embed
Boas práticas usando RSpec
Apresentação sobre teste no 7 Encontro do Frevo on Rails
Cirdes
September 15, 2012
Transcript
24 slides
-
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 -
DO QUE PRECISAMOS? POR QUE? COMO? ONDE? QUEM? sábado, 15
de setembro de 12 -
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 -
#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 -
#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 -
#USE LET LET(:HOUSE) { FACTORY(:HOUSE) } #CORRECT #WRONG BEFORE DO
@HOUSE = FACTORY(:HOUSE) END sábado, 15 de setembro de 12 -
#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 -
#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 -
#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 -
#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 -
#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 -
#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 -
#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 -
#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 -
#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 -
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 -
E ISSO É TUDO PESSOAL! CIRDES HENRIQUE @CIRDESBHF [email protected] sábado,
15 de setembro de 12