Как преобразовать errors_on в RSpec 3 синтаксис?

Недавно я обновился от RSpec 2.99 до RSpec 3. Это было бы одним из моих спецификаций:

require 'spec_helper'

  describe User, :type => :model do

    it "is invalid without a password" do
      expect(FactoryGirl.build(:user, :password => nil).errors_on(:password).size).to eq(1)      
    end

  end

end

Я уже запустил камень Transpec, который должен преобразовать большинство моих спецификаций в синтаксис RSpec 3. Тем не менее, я все еще получаю эту ошибку (и несколько других):

 Failure/Error: expect(FactoryGirl.build(:user, :password => nil).errors_on(:password).size).to eq(1)
 NoMethodError:
   undefined method `errors_on' for #<User:0x00000108beaba0>

Я попытался перезаписать тест несколькими способами, но ошибка не исчезнет.

Помогает ли кто-нибудь?

Ответ 2

Если вы не хотите связывать другой драгоценный камень, вы можете вызвать valid? для объекта теста, а затем обратиться к массиву errors:

require 'spec_helper'

describe User, :type => :model do

  it "is invalid without a password" do
    user = FactoryGirl.build(:user, :password => nil)
    user.valid?
    expect(user.errors[:password].size).to eq(1)
  end

end

Ответ 3

Простой подход:

it "is not valid without a correct email format" do
  user.email = 'user-email.com'
  user.valid?

  expect(errors_from session_form, :email).to include('is invalid')
end

def errors_from(record, attr)
  record.errors[attr].to_sentence
end