gpt4 book ai didi

ruby-on-rails - Ruby on Rails:ActiveRecord::NotNullViolation:SQLite3::ConstraintException:NOT NULL 约束失败:尝试运行单元测试时出错

转载 作者:太空宇宙 更新时间:2023-11-03 16:12:36 29 4
gpt4 key购买 nike

我正在尝试对我的应用程序运行单元测试,我最初的错误是“表 xx 没有名为 yy 的列”,因此在我的 yml 文件中我将字段更改为 id。但是,现在它给了我这个错误:

CarsControllerTest#test_should_destroy_car:ActiveRecord::NotNullViolation: SQLite3::ConstraintException: NOT NULL 约束失败我该如何解决这个问题并运行我的测试?

最佳答案

create_table "cars_parts", force: :cascade do |t|
t.integer "car_id"
t.integer "part_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["car_id"], name: "index_cars_parts_on_car_id"
t.index ["part_id"], name: "index_cars_parts_on_part_id"
end

cars_parts 中的 created_at 有非空约束。

在错误中你可以看到它说 created_at can't be Null:

SQLite3::ConstraintException:NOT NULL 约束失败:cars_parts.created_at

所以在你的yml文件中你需要设置created_at:

one:
car_id: 1
part_id: 1
created_at: Time.current
updated_at: Time.current

two:
car_id: 2
part_id: 2
created_at: Time.current
updated_at: Time.current

编辑:

正如 Sebastian 所指出的,这不是一个理想的解决方案,AR 应该自动添加这些时间戳。

真正的问题是您将模型命名为 CarParts 所以它找不到模型。您应该将文件重命名为 cars_part.rb,并将模型名称重命名为 CarsPart

遇到此问题的其他人将原因归因于未找到模型:

https://github.com/rails/rails/issues/23316

关于ruby-on-rails - Ruby on Rails:ActiveRecord::NotNullViolation:SQLite3::ConstraintException:NOT NULL 约束失败:尝试运行单元测试时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58251296/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com