如何errors_on转换为RSpec的3语法?

问题描述 投票:12回答: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

我已经跑了是应该我的大部分规格都转换为RSpec的3语法Transpec宝石。不过,我仍然得到这个错误(和其他几个人):

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

我试图重新写在许多不同的方式测试,但是误差不会消失。

任何人都可以帮忙吗?

ruby-on-rails rspec rspec-rails
3个回答
4
投票

看起来它在rspec-collection_matchers存在。此外,从this issue就可以猴子修补它。


12
投票

如果你不希望捆绑其他宝石,你可以调用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

0
投票

一个简单的方法是:

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
© www.soinside.com 2019 - 2024. All rights reserved.