2016-11-23 2 views
0

Je suis nouveau dans Rspecs donc le code suivant que j'ai écrit est-il correct ... J'ai utilisé Rspec simple. Actuellement Rspec fonctionne correctement, mais les clients potentiels quels sont les changements à faire?
Si quelqu'un peut jeter un oeil à mon code et me aider ce serait apprécié ....Bonne façon d'écrire rspecs dans les rails

require 'spec_helper' 
require 'rails_helper' 

describe User do 
describe "fails" do 
    it "to create without email" do 
     user = User.create(:first_name => "test", :last_name => "test",:email => "") 
     user.errors.messages[:email][0].should eq "can't be blank" 
    end 
end 

describe "fails" do 
    it "to create without data" do 
     user = User.create(:first_name => "", :last_name => "", :email => "", :status => "") 
     user.errors.messages[:email][0].should eq "can't be blank" 
    end 
end 

describe "fail" do 
    it "to create without a valid email" do 
     user = User.create(:first_name => "", :last_name => "", :email => "[email protected]", :status => "") 
     expect(user).to be_valid, lambda { "expected valid email" } 
    end 
end 

describe "pass" do 
    it "to supports 2 letter domain qualifiers" do 
     user = User.create(:first_name => "", :last_name => "", :email => "[email protected]", :status => "") 
     user.save! 
    end 
end 

describe "pass" do 
    it "to supports 4 letter domain qualifiers" do 
     user = User.create(:first_name => "", :last_name => "", :email => "[email protected]", :status => "") 
     user.save! 
    end 
end 
end 

describe "pass" do 
    it "to supports 4 and more letter domain qualifiers" do 
     user = User.create(:first_name => "", :last_name => "", :email => "[email protected]", :status => "") 
     user.save! 
    end 
end 

describe "pass" do 
    it "to without first name" do 
     user = User.new 
     user.first_name = "" 
     user.last_name = "Test" 
     user.status = "active" 
     user.email = "[email protected]" 
     user.save! 
    end 
end 

describe "pass" do 
    it "to without last name" do 
     user = User.new 
     user.first_name = "Test" 
     user.last_name = "" 
     user.status = "active" 
     user.email = "[email protected]" 
     user.save! 
    end 
end 

describe "pass" do 
    it "to without status" do 
     user = User.new 
     user.first_name = "Test" 
     user.last_name = "Test" 
     user.status = "" 
     user.email = "[email protected]" 
     user.save! 
    end 
end 

describe "pass" do 
    it "to create new record without first name, last name and status" do 
     user = User.create(:first_name => "", :last_name => "", :email => "[email protected]", :status => "") 
     user.save! 
    end 
end 

describe "pass" do 
    it "to create new record with all parameter" do 
     user = User.new 
     user.first_name = "Test" 
     user.last_name = "Test" 
     user.status = "active" 
     user.email = "[email protected]" 
     user.save! 
    end 
end 

describe "pass" do 
    it "to update record" do 
     user = User.find_by_id(1127) 
     user.first_name = "Test" 
     user.last_name = "Test" 
     user.status = "active" 
     user.email = "[email protected]" 
     user.save! 
    end 
end 
+0

où sont vos tests? :) – fabersky

+0

Merci beaucoup @fabersky ... Je suis nouveau sur la pile aussi :) ... merci pour le bon montage ... –

Répondre

0
  1. Vous n'avez pas besoin à la fois spec_helper et rails_helper. spec_helper est déjà requis dans rails_helper. spec_helper est pour les spécifications qui ne dépendent pas de Rails (par exemple des classes dans le répertoire lib). rails_helper est pour les spécifications qui dépendent de Rails (par exemple vos modèles et contrôleurs)
  2. Essayez d'exécuter vos spécifications avec le drapeau --format documentation pour voir si vos noms d'exemples et de contextes ont du sens. Dans ce cas, je suis sûr que vous pouvez l'améliorer.

Au lieu de

describe "fails" do 
    it "to create without email" do 
    ... 
    end 
end 

il est plus significatif d'écrire

describe "when creating user without email" do 
    it "adds error" do 
    ... 
    end 
end 

et ainsi de suite. Vous pouvez également ajouter des exemples comme does not create new record

  1. Au lieu d'utiliser le modèle directement, vous pouvez utiliser les usines - https://github.com/thoughtbot/factory_girl_rails

  2. Vos pass exemples n'ont pas testé quoi que ce soit. Au lieu d'écrire ceci

    user = User.create (...) user.save!

vous pouvez écrire

expect { User.new(...).save }.to change(User, :count).by(1) 

Lorsque vous utilisez des usines, je suis sûr que les spécifications propres devrait ressembler à ce

require 'rails_helper' 

describe User do 
    let(:user) { FactoryGirl.build :user, first_name: 'First name', last_name: 'Last name', email: '[email protected]' } 

    context 'when user want to create account without email' do 
    before { user.email = nil } 

    it 'does not save user record' do 
     expect { user.save }.not_to change(User, :count) 
    end 
    end 
end 
+0

merci @dziamber ... votre réponse est très utile pour moi .... j'ai certains google il a couru la spécification ci-dessus comme ça. est-ce correct? \t il "échoue sans email valide" faire \t \t user = User.create (: prenom => "",: last_name => "",: email => "test @ test",: status => " «) \t \t attendent (utilisateur) .à be_valid, lambda { « attendue email valide »} \t fin –

+0

S'il vous plaît mettre à jour votre message au lieu du code de coller dans le commentaire car il est illisible maintenant –

0
it "fails without email" do 
    user = User.create(:first_name => "test", :last_name => "test",:email => "") 
    user.errors.messages[:email][0].should eq "can't be blank" 
end 

it "fails without parameters" do 
    user = User.create(:first_name => "", :last_name => "", :email => "", :status => "") 
    user.errors.messages[:email][0].should eq "can't be blank" 
end 

it "fails without a valid email" do 
    user = User.create(:first_name => "", :last_name => "", :email => "[email protected]", :status => "") 
    expect(user).to be_valid, lambda { "expected valid email" } 
end 

it "passes without first name" do 
    pre_count = User.count 
    user = User.new 
    user.first_name = "" 
    user.last_name = "Test" 
    user.status = "active" 
    user.email = "[email protected]" 
    user.save! 
    count = User.count 
    tot_count = pre_count + 1 
    count.should be tot_count 
    user.email.should eq "[email protected]" 
    user.first_name.should eq nil 
    user.last_name.should eq "Test" 
    user.status.should eq :active 
end 
+0

Avez-vous vérifié' bijou FactoryGirl'? Aussi bonne pratique est d'avoir une seule attente par exemple –

+0

sûr @dziamber ... je vais vérifier ... –