FactoryBot-显示我的对象User的所有字段



我的工厂:

factory :user_blocked, class: User do
name { 'Test' }
login { 'mylogin' }
uid { 'mylogin' }
password { 'test' }
password_confirmation { 'test' }
locked_at { nil }
trait :lock do
locked_at { Time.now.utc }
end
association :customer, factory: :customer
end

在我的测试中,我创建了一个新用户:

let(:user) { create(:user_blocked) }

但在我的对象中,用户不会出现我的字段locked_at

为什么会发生这种情况?

首先,正如Billy所建议的,您的工厂名为:user_blocked,其次,您的locked_at值是用";特征";命名为CCD_ 3。

因此,要创建一个具有";locked_at";value将您的代码更改为:

let(:user) { create(:user_blocked, :lock) }

这里有一个链接到FactoryBot";特征";功能描述:https://github.com/thoughtbot/factory_bot/blob/master/GETTING_STARTED.md#traits

在您的代码中,您正在创建一个基于:user工厂的对象,但您将locked_at添加到的工厂名为:user_blocked。更改

let(:user) { create(:user) }

let(:user) { create(:user_blocked) }

根据您的评论判断,问题不在您的工厂。看起来您正在使用Devise的lockable模块"locked_at";被标记为";"不安全";字段。这意味着,如果打印出user.attributes,无论它是否有值,都不会看到locked_at。这可以通过以下rspec示例来说明:

describe "lockable" do
subject(:user) { create(:user_blocked) }
it "does not serialize locked_at" do
expect(user.attributes).not_to include(locked_at: nil)
end
it "defaults locked_at to nil" do
expect(user.locked_at).to be_nil
end
end

相关内容

最新更新