簡単にするために、モデル 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
ご覧のとおり、ほとんどの場合、UPDATE 要求は試行されません。(何度も何度もテストを実行することで、一度見ました)。
だから私の質問は、誰かがそれらの削除を遅らせる方法を知っていますか?
本当にありがとうございました !
PS :
データベースクリーナーは、このリンクのように構成されています:
戦略を何度も変更しようとしましたが、何も役に立ちませんでした。