저는 아직 Ruby on Rails와 관련된 모든 보석들에 대해 매우 새로운 편입니다. 그래서 나와 필요가있는 경우 더 자세한 정보를 제공 해주시기 바랍니다.RSpec과 shoulda-matcher가있는 Ruby on Rails NoMethodError를 제공하는 validate_inclusion_of
사양 작성시 validate_inclusion_of 정규식에 문제가 있습니다.
내 현재 사양은 사용자 및 사용자 그룹과 관련이 있습니다. 사용자에게 사용자 그룹 ID가 있습니다.
사용자의 사용자 그룹 ID가 현재 사용자 그룹 ID 목록에 실제로 있는지 확인하고 싶습니다.
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
에 추가 내가
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
그래서는 그룹 ID가 확인하는 것 같다 다음과 같은 오류를 얻을
is_expected.to validate_inclusion_of(@company_user_group_id).in_array(CompanyUserGroup.full_list_of_ids)
에 is_expected.to 라인을 변경 유효하고 (예 : 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'"비트가 제거되고, 사양의 대부분은 어떤 알 수없는 이유로 실패합니다. 관련성이있는 경우에 대해 언급했습니다.
당신은 심지어 회사 사용자의 기업 사용자 gropu을 설정할 필요가 없습니다 수 있습니다
및 회사 그룹 모델에서 다음 방법은 내가 생각
# class methods
def self.full_list_of_ids
CompanyUserGroup.all.pluck(:id)
end
당신이 실제로 테스트하는 코드뿐만 아니라 테스트를 게시 할 수 전달하시기 바랍니다. –
일부 회사 모델과 마찬가지로? – Iain
예, 또한'CompanyUserGroup.full_list_of_ids' –