Rails 3.1 Rspec Creating test case validate field for Model

前端 未结 2 1234
梦毁少年i
梦毁少年i 2021-02-10 14:49

I\'m trying to create a test case for User model. Basically, it will validate first_name and last_name to be present.

What I am trying to do is to check whether the err

相关标签:
2条回答
  • 2021-02-10 15:23

    RSpec supports the notion of an "implicit" subject. If your first argument to the "describe" block is a class, RSpec automatically makes an instance of that class available to your specs. See http://relishapp.com/rspec/rspec-core/v/2-6/dir/subject/implicit-subject.

    require 'spec_helper'
    
    describe User do
    
      it "must have a first name" do    
        subject.should have(1).error_on(:first_name)
      end
    
      it "must have a last name" do
        subject.should have(1).error_on(:last_name)
      end
    end
    

    which results in RSpec output (if using --format documentation) of:

    User
      must have a first name
      must have a last name
    

    You can abbreviate it even further if you are content with the RSpec output defaults:

    require 'spec_helper'
    
    describe User do
      it { should have(1).error_on(:first_name) }
      it { should have(1).error_on(:last_name) }
    end
    

    which results in:

    User
      should have 1 error on :first_name
      should have 1 error on :last_name
    
    0 讨论(0)
  • 2021-02-10 15:39

    You can test by simply doing this as well:

    describe 'validations' do
      it { should validate_presence_of :firstname }
      it { should validate_presence_of :lastname  }
    end
    

    Take a look at the shoulda matchers for all such standard Rails Validation. This way is not just more concise but also takes care of the positive case. Meaning you then dont need to test the scenario mentioned below:

    it "passed validations when first_name is set"
      user = User.create(:firstname => 'f', :lastname => 'l')
      user.errors[:first_name].should be_empty
      user.errors[:last_name].should be_empty
    end
    
    0 讨论(0)
提交回复
热议问题