ruby-on-rails - Ruby Rails 5.1.6 测试在唯一列上失败
问题描述
我正在尝试进行开箱即用的测试,但它们在一个独特的列上失败了。还有谁有相同的问题吗?
rails new MyApp
rails g scaffold Person name:string:uniq note:text
rails db:migrate
将我的夹具编辑为:
one:
name: ONE
note: MyText
two:
name: TWO
note: MyText
people_controller_test.rb 有这个来加载初始夹具:
class PeopleControllerTest < ActionDispatch::IntegrationTest
setup do
@person = people(:one)
end
但看起来它正在加载两者,因为我在数据库中找到了这个:
sqlite> select * from people;
298486374|TWO|MyText|2018-06-06 23:21:29.686780|2018-06-06 23:21:29.686780
980190962|ONE|MyText|2018-06-06 23:21:29.686780|2018-06-06 23:21:29.686780
我收到此错误:
Error:
PeopleControllerTest#test_should_create_person:
ActiveRecord::RecordNotUnique: SQLite3::ConstraintException: UNIQUE constraint failed: people.name: INSERT INTO "people" ("name", "note", "created_at", "updated_at") VALUES (?, ?, ?, ?)
app/controllers/people_controller.rb:30:in `block in create'
app/controllers/people_controller.rb:29:in `create'
test/controllers/people_controller_test.rb:20:in `block (2 levels) in <class:PeopleControllerTest>'
test/controllers/people_controller_test.rb:19:in `block in <class:PeopleControllerTest>'
bin/rails test test/controllers/people_controller_test.rb:18
.
Finished in 0.848814s, 8.2468 runs/s, 8.2468 assertions/s.
7 runs, 7 assertions, 0 failures, 1 errors, 0 skips
删除 test.sqlite3 文件并不能修复它。(我见过人们对非 uniq 数据有问题)
我正在使用带有 Ruby 2.4.1p111 的 Rails 5.1.6。
任何帮助表示赞赏。
谢谢
账单
解决方案
我猜您正在使用包含以下代码的自动生成测试:
test 'create' do
assert_difference 'People.count' do
post people_url, params: { people: { name: people(:one).name }}
end
end
你能看到发生了什么吗?为您的创建操作生成的测试rails 使用第一个人员夹具的名称属性。把它改成这样:
test 'create' do
assert_difference 'People.count' do
post people_url, params: { people: { name: 'Matz' }}
end
end
那可能会做到。祝你好运。
推荐阅读
- java - 安卓和BLE
- android - 如何使用 exoplayer 顺序播放多个音频 uri?
- javascript - 在“单击”上添加对象后,对象数组为空
- php - WordPress 管理面板缺少样式和脚本
- c# - 在某些情况下如何修改委托以设置其返回值的属性
- javascript - JavaScript 对 JSON 数据进行排序并动态生成
- 和
- 基于键值的元素
- python - Pandas 语法中的数据框关于以下内容的错误:
- button - Syncfusion按钮如何在视图模型上触发视觉状态-Xamarin Forms
- javascript - 使用 sinon 对带有 got 模块的函数进行单元测试
- javascript - 如何实现范围与数字输入绑定的滑块