2013-12-11 2 views
0

Хороших кодеров вечер коллег,Rspec Validation Тесты на обновления

Я медленно пытается получить с рукоятками Rspec и большая часть моей проверки происходит после того, как пользователь будет создан, как вы можете видеть из приведенного ниже утверждения, здесь весь раздел проверки.

#validations for common attributes 

validates :email, presence: true, on: :create, uniqueness: true, 
      :format => /@/ 
validates :password, presence: true, on: :create, length: {minimum: 6} 

#validations blocks for dev 

with_options :if => lambda { |o| o.role_type == "developer" } do |dev| 
    dev.validates :first_name, presence: true, on: :update 
    dev.validates :last_name, presence: true, on: :update 
    dev.validates :languages, presence: true, on: :update 
    dev.validates :dev_desc, presence: true, on: :update 
    dev.validates :github, presence: true, on: :update, 
       :format => URI::regexp(%w(http https github)) 
    dev.validates :stackoverflow, presence: true, on: :update, 
       :format => URI::regexp(%w(http https stackoverflow)) 
    dev.validates :level, presence: true, on: :update 
    dev.validates :street, presence: true, on: :update 
    dev.validates :city, presence: true, on: :update 
    dev.validates :state, presence: true, on: :update 
    dev.validates :postcode, presence: true, on: :update 
end 

#validations block for employer 

with_options :if => lambda { |o| o.role_type == "employer" } do |e| 
    e.validates :company_name, presence: true, on: :update, 
       uniqueness: true 
    e.validates :employer_desc, presence: true, on: :update 
    e.validates :area_of_focus, presence: true, on: :update 
    e.validates :number_of_employees, presence: true, on: :update 
e.validates :street, presence: true, on: :update 
e.validates :city, presence: true, on: :update 
e.validates :state, presence: true, on: :update 
e.validates :postcode, presence: true, on: :update 
end 

Теперь у меня есть текущий тест, который неисправного ниже:

it "should not be valid with blank firstname" do 
     dev.first_name = ' ' 
     dev.should_not be_valid 
    end 

Пользователь перенаправляется на страницу редактирования, если они не являются полноценными. Я не понимаю, почему он не проходит. Я скрутил его и заменил на должен, который прошел тест.

Может кто-то, возможно, объясняет, почему он проходит, вот блок для разработчика:

let(:dev) { FactoryGirl.create :dev } 

Update: Вот мой завод, не знаю, как это будет влиять на ошибку:

factory :dev, class: User do 
    first_name { Faker::Name.first_name } 
    last_name { Faker::Name.last_name } 
    email { Faker::Internet.email } 
    password "12345678" 
    password_confirmation "12345678" 
    role_type "Developer" 
    dev_desc "New to development but trying to help the community" 
    github "www.github.com" 
    stackoverflow "www.stackoverflow.com" 
    languages "Rails" 
    level  "Junior" 
    street {Faker::Address.street_address} 
    city  {Faker::Address.city} 
    state {Faker::Address.state} 
    postcode {Faker::Address.zip_code} 
end 

Цените свою помощь, пытаясь понять это, так как валидация работает вручную после регистрации.

+0

Я до сих пор не вижу, какую ошибку вы получаете –

ответ

1

В валидации для first_name условны на role быть "developer", но ваш завод устанавливает role быть "Developer", поэтому валидация не применяются.

0

Изменения вашей проверки в

dev.validates :first_name, presence: true, allow_blank: => false, on: :update 

По умолчанию проверки наличия позволяет пустые значения

+0

Он по-прежнему терпит неудачу в моем тесте. –

Смежные вопросы