1. Dito TechTalk: Behavior Driven Development (BDD) rSpec Dito – Idéias & Soluções Novembro 2008
2. Behavior Driven Development Dan North’s response to TDD (Test-Driven Development) Testar primeiro! Por que? para programar com o teste em mente BDD = TDD com vocabulário focado no comportamento (behavior) e não testes.
3. Behavior Driven Development com rSpec Cada característica (feature) é uma “story” Story As a ... [role] I want to ... [some action] So that ... [business value!]
4. Behavior Driven Development com rSpec Scenarios G W T – Given, When, Then Scenario: título Given: [um contexto] And: opcional When: evento Then: resultado Scenario: outro variante...
5.
6.
7.
8.
9.
10. Modelo Usuário Para criar o modelo usuário temos generators do próprio rSpec. script/generate rspec_model Usuario name:string login:string email:string crypted_password:string rake db:migrate Junto com este model foi gerado um arquivo de teste para o modelo, no dir: “spec/models/usuario_spec.rb” É neste arquivo que vamos escrever as especificações . Uma especificação pode ser escrita usando o método it , que deve estar associado a um outro método, describe . Com eles podemos validar um contexto.
11. Especificações do Usuário O método describe Usuario usa fixtures, com isso temos que adicionar alguns itens ao arquivo: “spec/fixtures/usuarios.yml” Nosso método it usa lambda que especifica que o usuario existe, é invalido sem um name , um login , um email , e um crypted_password . Também especifica que deve possuir diversos taks . Em um método privado create_usuario , fazemos exatamente isso, criamos um usuario com um name .
16. Especificações do Task As especificações do task são parecidas com a do usuario. Como por exemplo o método describe também usa fixtures, com isso temos que adicionar alguns itens ao arquivo: “spec/fixtures/tasks.yml” Estamos especificando que o task existe, é invalido sem um titulo. Também especifica que um task pertence a um usuario . Em um método privado create_task , criamos um task com um titulo , e relacionado a um usuario .
23. Test::Unit para rSpec class DogTest def test_ bark assert_ algo def setup def teardown describe Dog it “should bark” object.should be _algo before (:each) { } after (:each) { }