Ruby on rails FactoryBot:未注册的特征:";待办事项;
为了帮助测试,我一直在通过一个引入了工厂机器人的程序进行工作。本教程在其他方面都很不错,但我还无法解决修复此错误的方法:Ruby on rails FactoryBot:未注册的特征:";待办事项;,ruby-on-rails,factory-bot,Ruby On Rails,Factory Bot,为了帮助测试,我一直在通过一个引入了工厂机器人的程序进行工作。本教程在其他方面都很不错,但我还无法解决修复此错误的方法: Failure/Error: let!(:items) { create_list(:item, 20, todo_id: todo.id) } KeyError: Trait not registered: "todo_id" 项目规格rb RSpec.describe 'Items API' do # Initialize the te
Failure/Error: let!(:items) { create_list(:item, 20, todo_id: todo.id) }
KeyError:
Trait not registered: "todo_id"
项目规格rb
RSpec.describe 'Items API' do
# Initialize the test data
let!(:todo) { create(:todo) }
let!(:items) { create_list(:item, 20, todo_id: todo.id) }
let(:todo_id) { todo.id }
let(:id) { items.first.id }
...
FB items.rb
FactoryBot.define do
factory :item do
name { Faker::StarWars.character }
done { false }
todo_id nil
end
end
FB todos.rb
FactoryBot.define do
factory :todo do
title { Faker::Lorem.word }
created_by { Faker::Number.number(digits: 10) }
end
end
routes.rb
Rails.application.routes.draw do
resources :todos do
resources :items
end
end
迁移
待办事项有很多项目
class CreateTodos < ActiveRecord::Migration[6.0]
def change
create_table :todos do |t|
t.string :title
t.string :created_by
t.timestamps
end
end
end
class CreateTodos
class CreateItems
我想这是一个相对简单的解决方案,但我对工厂机器人还不熟悉,我对一些可能的解决方案犹豫不决,因为它们改变了很多东西。如果有人有解决方案,我很想知道,否则我将继续努力挖掘factorybot文档,这并不是最糟糕的事情。我想问题来自这里: items.rb
FactoryBot.define do
factory :item do
name { Faker::Starwars.character }
done { false }
todo_id nil
end
end
我把它改成:
FactoryBot.define do
factory :item do
name { Faker::Lorem.character }
done { false }
todo_id { 1 }
end
end
这是洛雷姆而不是星球大战,因为我犯了这个错误:
未初始化常量伪造者::星战
我给了
todo\u id
一个值1,这感觉不对。但在我找到更好的解决方案之前。。。它正在通过测试。我认为问题来自这里:
items.rb
FactoryBot.define do
factory :item do
name { Faker::Starwars.character }
done { false }
todo_id nil
end
end
我把它改成:
FactoryBot.define do
factory :item do
name { Faker::Lorem.character }
done { false }
todo_id { 1 }
end
end
这是洛雷姆而不是星球大战,因为我犯了这个错误:
未初始化常量伪造者::星战
我给了todo\u id
一个值1,这感觉不对。但在我找到更好的解决方案之前。。。它正在通过测试
在工厂内建立协会是可能的。如果工厂
名称与关联名称相同,工厂名称可以保留
退出。- 在工厂内建立协会是可能的。如果工厂 名称与关联名称相同,工厂名称可以保留 退出。
-
由于todo_id是在项目和todo之间创建关系的外键,因此您不应该手动分配它,因为在运行测试套件时,您不知道该todo的id是什么-当然,您可以在每次运行测试或通过种子时重置DB,但这不包括100%的情况 您可以使用FactoryBot提供的 由于可以从模型中推断关联,因此可以执行以下操作:
FactoryBot.define do
factory :item do
todo
name { Faker::Lorem.character }
done { false }
end
end
由于todo_id是在项目和todo之间创建关系的外键,因此您不应该手动分配它,因为在运行测试套件时,您不知道该todo的id是什么-当然,您可以在每次运行测试或通过种子时重置DB,但这不包括100%的情况 您可以使用FactoryBot提供的 由于可以从模型中推断关联,因此可以执行以下操作:
FactoryBot.define do
factory :item do
todo
name { Faker::Lorem.character }
done { false }
end
end
TODO的迁移情况如何?@SebastianPalma添加了TODO和ItemsHow的迁移情况如何?@SebastianPalma添加了TODO和Items的迁移情况谢谢!这就是为什么我觉得这真的是错的。。协会应该处理它,但是,直到你的帖子(和max的帖子)之前,我真的不知道如何在fb环境中设置它。谢谢!这就是为什么我觉得这真的是错的。。协会应该处理它,但是,直到你的帖子(和max的帖子)我才真正确定如何在fb环境中设置它。