Я по-прежнему довольно новичок в Ruby on Rails и всех связанных с ним драгоценных камнях и т. Д., Поэтому, пожалуйста, со мной и попроси меня предоставить дополнительную информацию, если это необходимо.Ruby on Rails с RSpec и соавтором validate_inclusion_of, предоставляющим NoMethodError
У меня возникли проблемы с совпадением validate_inclusion_of при написании спецификации.
Мои текущие спецификации относятся к пользователям и группам пользователей. У пользователя есть идентификатор группы пользователей.
Я хочу проверить, что идентификатор группы пользователей пользователя фактически находится в списке идентификаторов текущей группы пользователей.
На данный момент мой спецификации в основном:
describe 'company_user_group list of valid IDs' do
let!(:company_user_group_everything) { FactoryGirl.create(:company_user_group_everything) }
let!(:company_user_group_nothing) { FactoryGirl.create(:company_user_group_nothing) }
it '' do
@company_user = FactoryGirl.create(:company_user, id: 1)
CompanyUser.current_id = @company_user.id
is_expected.to validate_inclusion_of(:company_user_group_id).in_array(CompanyUserGroup.full_list_of_ids)
end
end
но ошибка, я получаю:
1) CompanyUser validations company_user_group list of valid IDs should validate that :company_user_group_id is either ‹2› or ‹3›
Failure/Error: is_expected.to validate_inclusion_of(:company_user_group_id).in_array(CompanyUserGroup.full_list_of_ids)
NoMethodError:
undefined method `attribute_setter' for nil:NilClass
Я пробовал различные разные вещи и отлажена с помощью byebug и т.д., но ничего не работает для меня.
например.
Добавление в
@company_user_group_id = @company_user.company_user_group_id
и изменяя is_expected.to строку
is_expected.to validate_inclusion_of(@company_user_group_id).in_array(CompanyUserGroup.full_list_of_ids)
Я получаю следующую ошибку
1) CompanyUser validations company_user_group list of valid IDs should validate that :8 is either ‹8› or ‹9›
Failure/Error: is_expected.to validate_inclusion_of(@company_user_group_id).in_array(CompanyUserGroup.full_list_of_ids)
Shoulda::Matchers::ActiveModel::AllowValueMatcher::AttributeDoesNotExistError:
The matcher attempted to set :8 on the CompanyUser to 8, but that
attribute does not exist
Таким образом, кажется, что идентификатор группы, чтобы проверить, (например, 8), и массив действителен (например, 8 и 9), но совпадение не работает.
Любая помощь очень ценится!
Некоторые из пользовательской модели компании
# This model holds User identities for internal staff. This model is
# primarily intended for use in the xxxx application.
class CompanyUser LT ActiveRecord::Base
acts_as_authentic do |c|
c.merge_validates_uniqueness_of_email_field_options case_sensitive: false
c.merge_validates_length_of_password_field_options minimum: 8
if Rails.env.production?
c.logged_in_timeout = 30.minutes
else
c.logged_in_timeout = 90.minutes
end
end
# Constants
# relationships
belongs_to :company_user_group
# validations
validates :first_name, presence: true, length: { maximum: 20 }
validates :last_name, presence: true, length: { maximum: 20 }
validates :company_user_group_id, presence: true, numericality: { only_integer: true, greater_than: 0 }
validates :company_user_group_id, inclusion: { in: CompanyUserGroup.full_list_of_ids }, unless: 'Rails.env.test?'
validate :check_sys_admin_permission
Если «если:"? Rails.env.test»бит не будет удален, большинство из спецификации терпит неудачу по неизвестной причине. Просто упоминается в случае, если это имеет значение.
и следующий метод из модели компании группы
# class methods
def self.full_list_of_ids
CompanyUserGroup.all.pluck(:id)
end
Вы можете разместить код, который вы на самом деле тестирования, а также тест пожалуйста. –
Как и в некоторых моделях компании? – Iain
Да, а также 'CompanyUserGroup.full_list_of_ids' –