Ответ 1
Похоже, он существует в rspec-collection_matchers. Также из этот вопрос вы можете обезвредить его.
Недавно я обновился от 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>
Я попытался перезаписать тест несколькими способами, но ошибка не исчезнет.
Помогает ли кто-нибудь?
Похоже, он существует в rspec-collection_matchers. Также из этот вопрос вы можете обезвредить его.
Если вы не хотите связывать другой драгоценный камень, вы можете вызвать 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