【问题标题】:Error Rails Minitest in simple post request简单发布请求中的错误 Rails Minitest
【发布时间】:2022-11-20 22:38:12
【问题描述】:

我面临一个非常奇怪的问题,我在这里找不到答案。我正在尝试在我的 Rails API 应用程序中使用 Minitest 进行简单测试。

我有两个简单的模型,一个是电影:

class CreateMovies < ActiveRecord::Migration[7.0]
  def change
    create_table :movies do |t|
      t.string :title
      t.text :synopsis
      t.datetime :launch_date
      t.string :age_classification
      t.string :length
      t.string :genre
      t.string :director
      t.string :poster
      t.decimal :rating_avg

      t.timestamps
    end
  end
end

另一个是会话

class CreateSessions < ActiveRecord::Migration[7.0]
  def change
    create_table :sessions do |t|
      t.references :movie, null: false, foreign_key: true
      t.text :times
      t.text :dates

      t.timestamps
    end
  end
end

测试“应该创建会话”自动生成测试函数:

class SessionsControllerTest < ActionDispatch::IntegrationTest

  setup do
    @movie = movies(:one)
    @session = sessions(:one)
  end

  test "should create session" do
    assert_difference("Session.count") do
      post sessions_url, params: { session: { dates: @session.dates, movie_id: @session.movie_id, times: '21:00' } }, as: :json
    end

    assert_response 201
  end
end

我遇到以下错误:

Minitest::UnexpectedError: ActiveRecord::RecordInvalid: Validation failed: Movie must exist

电影.yml

one:
  title: Avatar
  synopsis: A paraplegic Marine dispatched to the moon Pandora on a unique mission becomes torn between following his orders and protecting the world he feels is his home
  launch_date: 18/12/2009
  age_classification: +13
  length: 162
  genre: Action
  director: James Cameron
  poster: https://m.media-amazon.com/images/M/MV5BNjA3NGExZDktNDlhZC00NjYyLTgwNmUtZWUzMDYwMTZjZWUyXkEyXkFqcGdeQXVyMTU1MDM3NDk0._V1_SX300.jpg
  rating_avg: 8.0

会话.yml

one:
  movie: one
  times: 16:00
  dates: 17/07/2022

我已确保 Movie 存在时邮政行正在执行,但不知道为什么会这样。有任何想法吗?

PD:在 Ruby 3.1.2 和 Ruby On Rails 7.0.4 上运行

我试图在邮政声明它没有工作。我还尝试在控制器创建会话时输出电影是否存在于控制器中,但它不会保存会话,因为ActiveRecord::RecordInvalid: Validation failed: Movie must exist

【问题讨论】:

  • 您在控制器中的session_params(强参数)方法是什么样的?
  • @spickermann 感谢您的回答!看起来像这样params.permit(:movie_id, :times, :dates)

标签: ruby-on-rails ruby testing minitest ruby-on-rails-7


【解决方案1】:

您的参数嵌套在请求中的session 下,但您的强参数方法并未反映这种嵌套。

将您的 session_params 方法更改为:

def session_params
  params.require(:session).permit(:movie_id, :times, :dates)
end

【讨论】:

  • 就是这样!太感谢了!顺便说一句,你能告诉我有没有 .require(:session) 的区别吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-15
  • 2017-04-30
  • 2016-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多