Создать тест действия с has_many через ассоциацию - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь проверить основы c создать действие. У меня есть модель MealPlan, которая has_many :dinners, through: :meals. Пользователь может создать MealPlan на неделю, который будет добавлять 7 блюд с указанием c ужинов. Это работает.

У меня проблемы с его тестированием.

  setup do
    @user = users(:travis)
    sign_in @user
  end

  test "should create a mealplan" do
    post meal_plans_url, params: { meal_plan: {dinner_ids: [1, 2, 3, 4, 5, 6, 7],
                                 weekof: Date.today.beginning_of_week.next_week }}

    assert_redirected_to meal_plan_path(MealPlan.last)
  end
end

Это вызывает метод создания в food_plans_controller:

    def create
      @meal_plan = current_user.meal_plans.build(meal_plan_params)
      respond_to do |format|
        if @meal_plan.save!
         format.html { redirect_to @meal_plan, notice: 'Dinner was successfully created.' }
        else
        ...
      end
    end
   end

Довольно просто, я думаю но всякий раз, когда я пытаюсь сохранить это в тестах, я получаю эту ошибку: ActiveRecord::RecordInvalid: Validation failed: Dinners is invalid (я добавил удар на save, чтобы увидеть, что происходит).

Кроме того, у меня есть приспособления для 7 обедов, которые я может получить доступ, когда я настрою эти тесты.

Это - файл food_plan.rb для некоторого контекста, опять же ничего необычного:

class MealPlan < ApplicationRecord
    belongs_to :user
    has_many :meals
    has_many :dinners, through: :meals
end


1 Ответ

1 голос
/ 17 января 2020

Пожалуйста, попробуйте это:

params: { meal_plan: { dinner_ids: Dinner.where(id: [1, 2, 3, 4, 5, 6, 7]), weekof: Date.today.beginning_of_week.next_week }}

Я думаю, что вы что-то пропустили в своих конверсиях параметров, поэтому попробуйте это, и я думаю, что вы решите проблему.

Обновление

PS. Я так рад, что мы поняли это :-) Надеюсь, вы также поняли, что происходит; -)

...