hasyrails / calendar-vue-original

0 stars 0 forks source link

t4_api_cards_update / Api::Cards#updateでscheduleレコードも変更されることを確認するテストを実装する #263

Closed hasyrails closed 4 years ago

hasyrails commented 4 years ago

1アクションでrenderは1回まで

def update
    if @card.update(card_params)
      render json: @card
    else
      render json: @card.errors, status: :bad_request
    end

    @schedules = Schedule.where(card_id: @card.id)
    if @schedules.present?
      @schedules.each do |schedule|
        schedule.update(schedule_params)
        render json: schedule
      end
    end
  end

Image from Gyazo

修正

def update
    if @card.update(card_params)
      @schedules = Schedule.where(card_id: @card.id)
      if @schedules.present?
        @schedules.each do |schedule|
          schedule.update(schedule_params)
        end
      end
      render json: [{card: @card}, {schedules: @schedules}]
    else
      render json: @card.errors, status: :bad_request
    end

  end
hasyrails commented 4 years ago

レスポンスjsonの構造を変更した

Image from Gyazo

→テストコードも合わせる必要がある

hasyrails commented 4 years ago

レスポンスjsonをチェックするテストコードを修正

it "指定したcardレコードが更新される" do
        expect { subject }.to change { Card.find(card.id).body }.from(card.body).to(params[:body])
        expect { subject }.not_to change { Card.find(card.id).description }
        expect { subject }.not_to change { Card.find(card.id).created_at }
        res = JSON.parse(response.body)
        expect(res[0]["card"]["body"]).to eq 'UpdatedTestCardDetail'  ## ここ
        expect(response).to have_http_status(200)
      end
hasyrails commented 4 years ago

Validation failed: モデル must existエラー → scheduleファクトリデータ生成時にエラーのため修正した