如何将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 gem,它应该将我的大部分规范转换为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>

我试着用不同的方法重写测试,但错误不会消失。

有人能帮忙吗?

如果你不想绑定另一个gem,你可以在测试对象上调用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

看起来它存在于aspect -collection_matchers中。

一个简单的方法是:

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

相关内容

  • 没有找到相关文章

最新更新