Я пытаюсь написать спецификации для моего драгоценного камня, который генерирует otp и сохраняет его в db. Теперь я пишу спецификации для этого. поэтому в основном у меня есть три метода: generate_otp!
, regenerate_otp!
, verify_otp(otp)
. то, что generate_otp!
делает это вызывает метод generate_otp
, который содержит три переменныеслучайное значение stub в rspec с secure_random
otp_code
- в основном случайное значение, генерируемое с помощью secure_randomotp_verified
- логическое значение, чтобы установить статус того, проверяется OTP или нетotp_expiry_time
- устанавливает время истечения для otp, которое может быть установлено приложением rails в конфигурации.
все эти три столбца моего db также.
Теперь после generate_otp
я звоню active_records
save
метод сохранения значений db.
Теперь для тестирования я использую в :memory:
и сохраняю значения в таблице. после тестирования я удаляю db. Теперь я не получаю, как заглушить случайно сгенерированное значение и проверить, присвоено ли значение или нет всем трем столбцам, т. Е. otp_code
, otp_verified
, otp_expiry_time
.
Вот код для моих методов, которые мне нужно проверить.
def generate_otp
self.otp_verified = false
self.otp_expiry_time = OtpGenerator::configuration.otp_expiry_time
self.otp_code = SecureRandom.hex(4)
end
def generate_otp!
generate_otp
save
end
Любая помощь? Я также проверил этот question, но не очень полезен. Впервые я пишу спецификации и на самом деле не так много имею опыт работы с rspec. Я также изучил официальный documentation за макет и заглушку, но я действительно запутался.
обновление: otp_spec код
require 'spec_helper'
describe OtpGenerator do
let(:user) { build_mock_class.new() }
before(:all) { create_table }
after(:all) { drop_table }
describe '#generate_otp' do
it 'generate otp and save it' do
user.generate_otp!
end
end
describe '#regenerate_otp' do
it 'regenerate otp and save it' do
end
end
describe '#verify_otp' do
it 'verifies otp' do
end
end
def build_mock_class
Class.new(ActiveRecord::Base) do
self.table_name = 'mock_table'
include OtpGenerator
end
end
def create_table
ActiveRecord::Base.connection.create_table :mock_table do |t|
t.string :otp_code
t.boolean :otp_verified
t.datetime :otp_expiry_time
end
end
def drop_table
ActiveRecord::Base.connection.drop_table :mock_table
end
end
Связанный вопрос и ответы не будут иметь большого смысла, если вы изучаете другой подход к методам stubbing. Каждая библиотека тестирования (и версии RSpec) имеет немного другой синтаксис для заглушек методов, поэтому будьте осторожны, чтобы вы не смешивали примеры, найденные вами в Интернете. Большинство деталей в вашем вопросе (включая тот факт, что вы хотите заглушить метод генератора случайных чисел) не имеют значения. Не могли бы вы показать, где вы находитесь с одним RSpec-тестом, и что именно вы застряли в документации? Кроме того, действительно важно выбрать пример поведения, который вы хотите утверждать. –
На самом деле это то, что проблема, я не получаю, как заглушить, и проверить, что значение хранится в db и назначено столбцу otp_code. Я запутался здесь. – Sinscary
Покажите то, что у вас есть, и очень важно показать, что вы хотите, чтобы ваш тест продемонстрировал. –