=> "", :body => "Texto qualquer em body", :publication => Time.now.strftime("%Y-%m-%d %H:%M:%S"), :enabled => 1) post.should be_valid end end Saida: F Failures: 1) Post should be not created without title Failure/Error: post.should be_valid expected valid? to return true, got false # ./spec/models/post_spec.rb:6:in `block (2 levels) in <top (required)>' Finished in 0.04851 seconds 1 example, 1 failure rake aborted! ruby -S bundle exec rspec ./spec/models/post_spec.rb failed Pra quem nao conhece Rspec, eu descrevou uma situacao quem nao pode acontecer no "it", mas faco ao contrario no final "post.should be_valid", eu digo que ele "deve validar". Se voce ler a saida vai ver o que estou dizendo. Para nossa espectativa funcionar troque o "should", por "should_not" e ira ver que a saida sera GREEN. Faca o mesmo teste para "body", ja que sao os unicos que validamos no post passado em "app/models/post.rb". describe Post do it "should be not created without title" do post = Post.new(:title => "", :body => "Text for body", :publication => Time.now.strftime("%Y-%m-%d %H:%M:%S"), :enabled => 1) post.should_not be_valid end it "should be not created without body" do post = Post.new(:title => "Title", :body => "", :publication => Time.now.strftime("%Y-%m-%d %H:%M:%S"), :enabled => 1) post.should be_valid end end Ocorreu o mesmo RED de antes, faca ele ficar GREEN e vamos agora para o REFACTORY. Esse codigo esta meio repetitivo, vamos deixar ele mais elegante: describe Post do before(:each) do @post = Post.new(:title => "Title", :body => "Text for body", :publication => Time.now.strftime("%Y-%m-%d %H:%M:%S"), :enabled => 1) end it "should be not created without title" do @post.title = nil @post.should_not be_valid end it "should be not created without body" do @post.body = nil @post.should_not be_valid end end Eu criei um "before(:each)" que criara um post, dentro de cada "it" eu passo o valor que eu quero testar como "nil", ira dar o efeito que quero. Crio um ultimo "it" para todos os dados passem. it 'should be created with all requirements' do @post.should be_valid end Agora facam os mesmos tipos de teste com User, depois conferem se ficou igual ao que eu fiz. Lembre que o Devise faz validacao de campos e que voce so precisa testar os campos que exigem validacao. E tambem nao existe um certo, e sim o que voce acha necessario. describe User do before(:each) do @user = User.new(:name => 'User Test', :login => 'usertest', :email => 'test@test.com', :password => 'senha123', :password_confirmation => 'senha123' ) end it 'should be not created without name' do @user.name = nil @user.should_not be_valid end it 'should be not created without login' do @user.login = nil @user.should_not be_valid end it 'should be not created without email' do @user.email = nil @user.should_not be_valid end it 'should be not created without password' do @user.password = nil @user.should_not be_valid end it 'should be not created if password and password_confirmation not equal' do @user.password = 'senha123' @user.password_confirmation = 'senha' @user.password.should_not == @user.password_confirmation end it 'should be created with all requirements' do @user.should be_valid end end O unico comportamento diferente e o penultimo que testa se a senha do usuario esta diferente. Vamos voltar a fazer modificacoes no Post.