我最近从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>
我试图以多种不同的方式重新编写测试,但错误不会消失。
有人可以帮忙吗?
答案 0 :(得分:11)
如果您不想捆绑其他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
答案 1 :(得分:4)
看起来它存在于rspec-collection_matchers中。同样来自this issue你可以修补它。
答案 2 :(得分: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