为了简单起见,我有一个模型 Canvas 和一个模型 Block。
在我的每个画布视图(这只是一个基本表)上,我都有一些旨在更新某些块内容的表单。
我想用 RSPEC 和 Capybara 测试更改是否正确提交。
所以我有这条线:
page.driver.execute_script("document.getElementById('block_#{(index+1).to_s}').submit();")
发送到我的 BlocksController
class BlocksController < ApplicationController
def update
b=Block.find_by_id_case_and_canvas_id(params[:block][:id_case], params[:block][:canvas_id])
b.update_attributes(params[:block])
redirect_to "/canvas/"+b.canvas_id.to_s
end
end
我可以向您保证,我的画布视图和所有控制器/模型都可以正常工作。
但是测试失败并出现此错误:
NoMethodError: undefined method `update_attributes' for nil:NilClass
所以我查看了我的测试日志,发现 Database_cleaner 似乎在我完成工作之前删除了一些表:
Processing by BlocksController#update as HTML
Block Load (0.4ms) SELECT "blocks".* FROM "blocks" WHERE "blocks"."canvas_id" = 1 AND "blocks"."id_case" = 1 LIMIT 1
Parameters: {"utf8"=>"✓", "block"=>{"content"=>"1234567890", "id_case"=>"1", "canvas_id"=>"1"}, "id"=>"1"}
(141.8ms) DELETE FROM "blocks";
Block Load (0.5ms) SELECT "blocks".* FROM "blocks" WHERE "blocks"."id_case" = 1 AND "blocks"."canvas_id" = 1 LIMIT 1
如您所见,大多数情况下,更新请求甚至都没有尝试过。(我通过一次又一次地运行测试看到了它)。
所以我的问题是,有人知道如何延迟这些删除吗?
十分感谢 !
PS:
数据库清理器的配置与此链接中的一样:
我曾多次尝试改变策略,但没有任何帮助。