前提・実現したいこと
railsの学習をしている初学者です。
初めて作っているアプリで、テストを書いてみているのですが、テストの結果が想定していたものと違います。
何故なのか分からないので、お分かりになる方いたらご教示いただきたいです。
アプリの機能の一部で、美容院などでよく見るような、カレンダー予約機能を実装している段階です。
カレンダー予約機能では
「xx月xx日 x時〜x時」という単発だけでなく
「xx月xx日~xx日の期間で毎週月曜日」などの曜日指定で予約ができる、または店舗側が予約を開放できるようにしようとしています。
発生している問題・エラーメッセージ
テストの意味としては、1件だけ予約枠を開放し、その後に複数選択で予約を開放した際に先の予約開放と重複していた枠があれば、重複を弾いて、それ以外の枠を予約開放する。
という挙動になっているかを確認するものです。
具体的には最初に1件だけ予約枠を開放。
次に、複数選択で13日後までの期間で計4枠選択。
が、先に1枠選択されているものと重複していた分は弾かれ、結果的に3件だけ予約枠が増える。という想定で書きました。
予約枠の増減の判断はAvailableテーブルのデータの増減で判断しようと考えています。
ログに出力されているエラーメッセージ
FAIL ShopReservationFrameTest#test_open_reservation_frame_except_duplicate (2.73s) "Available.count" didn't change by 3. Expected: 6 Actual: 3 test/integration/shop_reservation_frame_test.rb:33:in `block in <class:ShopReservationFrameTest>'
記述しているテストコード
require 'test_helper' class ShopReservationFrameTest < ActionDispatch::IntegrationTest def setup @shop = shops(:sample_shop) end def set_day @day = Date.today.wday @day1 = Date.today.wday+1 end //曜日開放した際に、すでに予約開放している日時は弾きつつも、他日時は開放されているかを確認 test "open reservation frame except duplicate" do get s_res_path(@shop) post s_set_res_path(@shop), params: { rent_date: Date.today, start_time: "10", end_time: "11"} assert_difference 'Available.count', 3 do post s_day_res_path(@shop), params: { rent_start: Date.today, rent_end: Date.today+13, start_time: "10", end_time: "11", day: ["#{@day}", "#{@day1}"]} end end
試したこと
複数選択での14日間の期間などを変更してみたものの Expected: 6 の表示が変わりませんでした。。
まず、Expected: 6 の数字がどこからきているのかが理解できていません。
お分かりになる方いたら、ご教示いただきたいです。
補足情報(FW/ツールのバージョンなど)
rails (5.2.4.5)
minitest (5.14.4)
あなたの回答
tips
プレビュー