RSpec Stories - Ruby gerado a partir do texto!
Não, eu não quero que vocês gerem o código dos testes, isto iria apenas criar testes inúteis!
Mas eu acho muito chato ter certeza de que todos os possíveis passos de um arquivo txt com a user story estão presentes nos passos definidos no arquivo .rb
Claro que isto não esta considerando reutilização de passos através de Mixins ou outras técnicas semelhantes, mas este script me ajudou bastante ja, então resolvi compartilhar ele para quem estiver interessado
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | name=ARGV[0] all = [] last = "" f = File.new(name) f.each_line do |l| l.strip! l,command,params = *(/^(When|Then|Given|And) (.*)/.match l) if l command = last if command == "And" last = command params = params.gsub /"/, '\"' all << "#{last} \"#{params}\" do\n pending\n end" end end all.uniq!.sort! sym_name = name[File.dirname(name).length+1..-5] puts %Q{require 'stories/helper' steps_for(:#{sym_name}) do } all.each { |l| puts " #{l}"} puts %Q{end with_steps_for :#{sym_name} do run "\#{dir = File.dirname(__FILE__)}/#{sym_name}.txt" end } |
eu salvei este código em um arquivo txt_to_steps.rb, e para utilizar basta executar:
ruby txt_to_steps.rb
Um exemplo de user story (utilizando o formato do RSpec) seria este texto:
Story: new user As a company employee I want to register in the CRM So that I can see and manage company contacts Scenario: user with no access to the system Given the username user1 And the password mypassword When the login form is submited Then the login form should be shown again Scenario: user registration Given the username user1 And the password mypassword And the email user1@company.com When the registration form is submited And there is no other user with the same e-mail or email Then the registration should be OK And the user should be redirected to / Scenario: repeated user registration Given the username user1 And the password mypassword And the email user1@company.com When the registration form is submited And there is already another user with the same name or email Then the registration should fail And the registration form should apear again Scenario: existing user login Given the username user1 And the password mypassword When the login form is submited Then the user should be redirected to /
O txt_to_steps pode ser melhorado para tentar identificar alguns padrões, mas como esta agora ja me poupou bastante trabalho
Sei que não é o código ruby mais limpo que vocês ja leram, mas para algo escrito em 5 minutos até que ficou legal
Se ajudar mais alguem, a única exigência é deixar um comentário aqui dizendo o que poderia ser melhorado no script
PS.: sei que o blog anda meio parado demais, mas é por um bom motivo, acho que daqui a um mes aproximadamente volta tudo ao normal e eu posso contar aqui o motivo deste tempo quase sem posts ![]()
Se você gostou deste post, lembre-se de assinar o RSS feed do blog, para ser notificado de novos posts!



Fala Urubatan, firme?
Bacana a idéia, vou testar aqui na proxima story. Minha sugestão, cria um script sake disso
Eu confesso que não tenho experenciado tanto o problema de perder tempo nessa tarefa, porque tenho uma série de steps padrão separados, e em cada story reutilizo uma boa parte deles =)
Sendo assim, como o parse é feito direto do txt, as steps específicas de cada story ficam bem enxutas.
Quando as coisas acalmarem por aqui também quero ver se as publico e compartilhamos + sobre o assunto.
Abraço!