工厂机器人创建不正确的数据
Posted
技术标签:
【中文标题】工厂机器人创建不正确的数据【英文标题】:Factory bot creates incorrect data 【发布时间】:2021-12-16 23:50:00 【问题描述】:为什么这个测试通过了?我不明白问题出在哪里:Factory bot 还是 Rails?
型号:
class Vote < ApplicationRecord
belongs_to :user
belongs_to :votable, polymorphic: true
validate :self_like
private
def self_like
errors.add(:user, 'self-like') if votable.author_id == user_id
end
end
工厂:
FactoryBot.define do
factory :vote do
value 1
user
association :votable, factory: :question
end
end
如果你输出被测试的对象(pp 投票),那么所有的属性都将为 nil。在这种情况下,可以获得关联对象(pp vote.votable)
describe 'validate :self_like' do
let!(:vote) build :vote
it "self-like" do
vote.valid?
expect(vote.errors[:user]).to include('self-like')
end
end
【问题讨论】:
votable.author_id 和 user_id 是否为零? 【参考方案1】:工厂的定义方式没有指定投票作者和用户匹配,所以votable.author_id == user_id
将是错误的。
我能想到的最佳解决方案是使用 after_build
挂钩更新可投票作者并强制它与用户匹配。
after(:build) do |vote|
vote.votable.update!(author: vote.user)
end
【讨论】:
以上是关于工厂机器人创建不正确的数据的主要内容,如果未能解决你的问题,请参考以下文章