【发布时间】:2015-08-30 03:17:43
【问题描述】:
我有一个update-type 方法,我正在尝试使用 MiniTest 和 FactoryGirl 在 Rails 中进行测试。我的问题是,虽然我可以看到更新 is 正确地发生在更新函数内,但它似乎并没有正确地延续到测试函数中。
这些是我们正在使用的对象,(obj 被赋予默认的 location 以开始:
location1 = create :location
location2 = create :location
obj = create :object, location: location1
然后我们调用update函数,它接受id的:
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。
我认为这与事务回滚无关,因为这一切都发生在一个测试中。 (而且我的印象是事务回滚只发生在测试之间)。
总而言之,我的问题是:为什么我的更新没有持续到 Rails MiniTest test 函数中?
编辑:这是整个测试:
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
【问题讨论】:
-
我认为我们需要先了解整个测试周期,然后才能以任何合理的方式考虑它。我也会尝试
save!以避免饮食异常。 -
我在文件中添加了整个且唯一的测试函数。我只使用
rake test test/models/obj_test.rb运行该文件 -
(@DaveNewton-Tried
save!,没有帮助...)
标签: ruby-on-rails minitest persistent