Поскольку encryption_key
не является атрибутом в вашей модели, вы не можете настроить его на своей фабрике.
encryption_key
автоматически вызывается гемом attr_encrypted
при назначении user_pass
дляCredential
объект.В этом случае это делается фабрикой.
Я бы переместил логику в вашем методе encryption_key
в класс для облегчения тестирования:
class Credential < ApplicationRecord
validates :user_name, presence: true
enum credential_type: { windows: 1, linux: 2 }
attr_encrypted :user_pass, key: :encryption_key
def encryption_key
EncryptionKeyGenerator.generate # or whatever name makes more sense
end
end
Затем в моем тесте я бызаглушка EncryptionKeyGenerator
:
RSpec.describe Credential, type: :model do
let(:credential) { create(:credential) }
let(:encryption_key) { "abcdefghijklmnopqrstuvw123456789" }
before do
allow(EncryptionKeyGenerator).to receive(:generate).and_return(encryption_key)
end
...
end
Инкапсуляция вашей логики генерации ключа шифрования в отдельный объект отделяет ее от вашей модели, позволяя вам легко протестировать эту логику без необходимости создания Credential
объекта.