【发布时间】:2015-11-23 22:36:30
【问题描述】:
我正在为我当前的 rails 项目编写测试,我遇到了一个问题,即通过 post 调用对测试数据库所做的更改没有持续足够长的时间来测试更改。
基本上,我有分配给它们的条形码的对象。我已经输入了一个表格,用户可以扫描多个条形码以一次更改多个对象。这是代码。
objecta_controller.rb:
def change_many
@barcodes = params[:barcodes].split()
@objects = ObjectA.order("barcode").where(barcode: @barcodes)
@objects.each do |b|
if can? :change, b
b.state_b()
end
end
end
(注意:@barcodes 是一串由空格分隔的条形码)
objecta_controller_test.rb:
test "change object" do
sign_in_as(:admin_staff)
b = ObjectA.new(
barcode: "PL123456",
current_status: "state_a")
post :change_many, { barcodes: b.barcode }
assert_equal("state_b", b.current_status, "Current status incorrect: #{b.to_s}")
end
使用 byebug,我已经确定对象在 change_many 方法中确实改变了状态,但是一旦返回测试,对象的状态就会恢复到原来的状态并且测试失败。
【问题讨论】:
-
尝试重新加载
b.reload在assert_equal调用之前
标签: ruby-on-rails ruby unit-testing testing