У меня есть модель DailyQuestionSet и метод в ней, который (должен) перейти в базу данных, посмотреть, существует ли DailyQuestionSet на этот день, если да, вернуть его или, если нет, создать новую, сохранитьэто в базу данных и возвращает его.
Кажется, это работает, когда я вызываю его из контроллера, а не из автоматического теста модели Ruby on Rails.Я не уверен, что схожу с ума или что-то упускаю.
Когда
class DailyQuestionSet < ApplicationRecord
def DailyQuestionSet.get_today_dailyquestionset
@dailyquestionset = nil
@questionlist = nil
@dailyquestionset_list = DailyQuestionSet.where('posed_date BETWEEN ? AND ?', DateTime.now.beginning_of_day, DateTime.now.end_of_day).all
if @dailyquestionset_list.empty?
@dailyquestionset = DailyQuestionSet.create!(posed_date: DateTime.now)
@dailyquestionset.save!
else
raise "disaster"
end
return @dailyquestionset
end
end
class DailyQuestionSetTest < ActiveSupport::TestCase
test "make sure today's daily_question_set has been deleted by the setup function" do
# later add function to delete today's daily_question_set so we can create it and then make sure get_today_dailyquestionset has created it once and then we can refer back to the same row
end
test "create daily_question_set and make sure it has questions" do
@dailyquestionset = DailyQuestionSet.get_today_dailyquestionset
....
end
test "create daily_question_set and make sure it has the same questions" do
@dailyquestionset = DailyQuestionSet.get_today_dailyquestionset
....
end
end
Я подумал, что это может сделать, это добавить строку в таблицу daily_question_sets в базе данных.каждый раз, когда я запускаю первый тест, а затем извлекаю эту строку при запуске второго теста.
Но когда я смотрю на базу данных теста, там нет создаваемой строки.Я думаю, что, возможно, Rails не фиксирует транзакцию в базе данных?
Или, проще говоря, исключение raise "disaster"
никогда не генерируется, потому что get_today_dailyquestionset всегда возвращает новый DailyQuestionSet и никогда не получает тот, который он (должен иметь)созданный из базы данных.
Я думаю, что я в корне неправильно понимаю тестирование в Rails.Стоит ли вообще возиться с БД в модельных тестах?