如何为空白字段编写rspec?[Rails3.1]

Mic*_*ant 5 ruby rspec ruby-on-rails

我使用rails 3.1 + rspec和工厂女孩.

我对必填字段(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
Run Code Online (Sandbox Code Playgroud)

但我失败了:

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
Run Code Online (Sandbox Code Playgroud)

型号代码:

class Industry < ActiveRecord::Base
  validates_presence_of :name
  validates_uniqueness_of :name
end
Run Code Online (Sandbox Code Playgroud)

工厂代码:

Factory.define :industry_name_blank, :class => 'industry' do |industry|
  industry.name   { nil }
end
Run Code Online (Sandbox Code Playgroud)

Jes*_*ott 8

这是一个例子......主题按照惯例填充"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
Run Code Online (Sandbox Code Playgroud)

最后一点是脆弱的,但你可以做到

有关语法的更多信息:http://cheat.errtheblog.com/s/rspec/