2012-08-20 1 views
0

je le test suivant:Validations Parce test pour échouer

test "should get create" do 
    sign_in(FactoryGirl.create(:user)) 
    assert_difference('Inquery.count') do 
     post :create, FactoryGirl.build(:inquery) 
    end 
    assert_not_nil assigns(:inquery) 
    assert_response :redirect 
    end 

et je continue à obtenir:

2) Error: 
test_should_get_create(InqueriesControllerTest): 
ActiveRecord::RecordInvalid: Validation failed: Email has already been taken, License number has already been taken 

Ce que je ne comprends pas pourquoi je reçois cette erreur dans ce test particulier, quand j'ai un test très similaire:

test "should get create" do 
    sign_in(FactoryGirl.create(:user, admin: true)) 
    assert_difference('Event.count') do 
     post :create, FactoryGirl.build(:event) 
    end 
    assert_not_nil assigns(:event) 
    assert_response :success 
    end 

et cela ne fait que très bien. La différence évidente est la ligne admin: true, mais cela n'a aucun effet comme je le soupçonnais.

Ajouté:

User_factory.rb

factory :user do 
    first_name "John" 
    last_name "Doe" 
    email "[email protected]" 
    password "foobar" 
    password_confirmation "foobar" 
    license_number '12345' 
    state 'AZ' 
    specialty 'Neurosurgery' 
    end 
+0

quel ordre les tests exécutés en? A quoi ressemble l'usine pour l'utilisateur? – girasquid

+0

Usine supplémentaire ajoutée. Les tests sont exécutés dans l'ordre standard des rails: Index, Afficher, Nouveau, Modifier ... –

+0

Vous avez déjà créé un utilisateur avec cet e-mail. Y a-t-il d'autres objets utilisateur créés avant celui-ci qui persistent? Êtes-vous sûr de courir dans l'environnement de test? Êtes-vous sûr que l'environnement de test est nettoyé avant chaque exécution? – MrDanA

Répondre

1

Votre User échoue parce que votre usine de validation est la mise en place d'un nouvel utilisateur pour votre test, mais la base de données n'est pas autorisé entre les deux. Changez votre usine pour ressembler à ceci, de sorte que le courrier électronique et license_number sont uniques chaque fois que vous créez un User:

factory :user do 
    first_name "John" 
    last_name "Doe" 
    sequence(:email) { |n| "example#{n}@example.com" } 
    password "foobar" 
    password_confirmation "foobar" 
    sequence(:license_number) { |n| "12345#{n}" } 
    state 'AZ' 
    specialty 'Neurosurgery' 
end 
+0

Je pourrais t'embrasser! –

Questions connexes