测试 create 方法的时候,这个 user: 代表什么?
# attributes_for(:user)这个是factory_girl的方法
post :create, user: attributes_for(:user)
#1 楼 @cosmosz 还有一个问题,假如我测试的是一个 engine,engine 有一个命名空间的,比如 ZerosApplicas::User,那这个 user: 怎么写?我的测试老是爆错
ActiveRecord::StatementInvalid:
PG::NotNullViolation: ERROR: null value in column "user_id" violates not-null constraint
DETAIL: Failing row contains (14, 109, null, null, null, null, null, null, 2017-01-10 02:29:09.174926, 2017-01-10 02:29:09.174926).
: INSERT INTO "zeros_applicas_nodes" ("applica_id", "created_at", "updated_at") VALUES ($1, $2, $3) RETURNING "id"
这个错误是告诉你数据库必须有个 user_id column, 你创建的时候要有 user_id。
如果你要用 attributes_for 的话,可以修改为attributes_for(:user, user_id: 123)
或者直接去 user factory,把 user/user_id 加上。
#4 楼 @cosmosz 这是我的 factory_girl,这些属性都是全的。 因为 User 这个类是在一个 engine 里的,我是 user: attributes_for(:user) 就报错,如果不在 engine 里面的话就没事,我考虑是个 user: 的写法有问题,是不是要加上命名空间? 比如 ZerosApplcas_user: 不过这个写法我也验证过,也是报同样的错误
factory :user, class: 'ZerosApplicas::User' do
user_id 1
applica_class "临时权限申请"
content "权限申请"
expired_date "2016-11-19"
system_memo nil
status "进行中"
sent_at Time.now