我最近升级从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>
我试图重新写在许多不同的方式测试,但是误差不会消失。
任何人都可以帮忙吗?
看起来它在rspec-collection_matchers存在。此外,从this issue就可以猴子修补它。
如果你不希望捆绑其他宝石,你可以调用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
一个简单的方法是:
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