У меня есть метод типа update
, который я пытаюсь протестировать в Rails с помощью MiniTest и FactoryGirl. Моя проблема в том, что хотя я вижу, что обновление происходит правильно в функции, оно, похоже, не вернулось обратно в тестовую функцию.Запись базы данных не сохраняется/сохраняется в функции проверки Rails?
Это является объекты, которые мы работаем с, (obj
дается по умолчанию location
начать с:
location1 = create :location
location2 = create :location
obj = create :object, location: location1
И тогда мы называем функцию update
, которая принимает id
«S:
obj.update_location(obj.id, location2.id)
update
функция:
def update_location(obj_id, loc_id)
@obj = Object.find(obj_id)
@obj.location_id = loc_id
@obj.save
end
Но когда, вернувшись в тестовый файл, я пытаюсь assert
изменением ...
assert_equal obj.location_id, location2.id
... Я получаю отказ. Консоль сообщает мне, что obj.location_id
по-прежнему равен location1.id
! Почему это?
Кажется, что @obj.save
является работает должным образом, потому что я вставил puts @obj.inspect
в обновление-функции и выводит правильно обновленный location_id
.
Я не думаю, что это связано с транзакционными откатами, потому что все это происходит в рамках одного теста. (И у меня создается впечатление, что откат транзакций происходит только между тестами).
В заключение, мой вопрос: Почему мое обновление не сохраняется в рельсах MiniTest test
функция?
EDIT: Вот весь тест:
test "update_location" do
location1 = create :location
location2 = create :location
#give the obj a starting `type`
obj = create :obj, location: location1
obj.update_location(obj.id, location2.id)
assert_equal obj.location_id, location2.id
end
Думаю, нам нужно будет увидеть весь цикл испытаний, прежде чем сможете подумать об этом разумным способом. Я также попробую «сэкономить!», Чтобы избежать употребления исключений. –
Я добавил целую и только тестовую функцию в файл. Я запускаю только этот файл, используя 'rake test test/models/obj_test.rb' –
(@ DaveNewton-Tried' save! ', Не помогло ...) –