Как написать rspec для пустого поля? [Rails3.1] - PullRequest
5 голосов
/ 10 октября 2011

Я использую рельсы 3.1 + rspec и factory girl.

Моя проверка обязательного поля (validates_presence_of) работает.Как заставить тест использовать этот факт как «успех», а не как «неудача»
Спецификация:

describe "Add an industry with no name" do
  context "Unable to create a record when the name is blank" do
    subject do
      ind = Factory.create(:industry_name_blank)
    end
    it { should be_invalid }
  end
end

, но я получаю ошибку:

Failures:

  1) Add an industry with no name Unable to create a record when the name is blank 
     Failure/Error: ind = Factory.create(:industry_name_blank)
     ActiveRecord::RecordInvalid:
       Validation failed: Name can't be blank
     # ./spec/models/industry_spec.rb:45:in `block (3 levels) in <top (required)>'
     # ./spec/models/industry_spec.rb:47:in `block (3 levels) in <top (required)>'

Finished in 0.20855 seconds
8 examples, 1 failure

Код модели:

class Industry < ActiveRecord::Base
  validates_presence_of :name
  validates_uniqueness_of :name
end

Заводской код:

Factory.define :industry_name_blank, :class => 'industry' do |industry|
  industry.name   { nil }
end

Ответы [ 2 ]

8 голосов
/ 10 октября 2011

Вот пример ... субъект заполняется "Industry.new" по соглашению

describe Industry do

  it "should have an error on name when blank" do
    subject.name.should be_blank
    subject.valid?
    subject.should have(1).error_on(:name)
    #subject.errors.on(:name).should == "is required"
  end

end

Последнее немного более хрупко, но вы могли бы сделать это

Подробнее о синтаксисе: http://cheat.errtheblog.com/s/rspec/

2 голосов
/ 10 октября 2011

Factory.build(:industry_name_blank) генерирует объект, в то время как Factory.create(:industry_name_blank) генерирует и сохраняет созданный объект.В вашем случае он не может сохранить объект, потому что он недействителен из-за отсутствия name, поэтому вы получаете ошибку проверки.

Поэтому вместо использования create используйте buildпопадание ошибок проверки: Factory.build(:industry_name_blank).Тогда вы сможете уточнить это, как предлагает Джесси:

subject.should_not be_valid
subject.should have(1).error_on(:name)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...