Gem 有关 RSpec 的 POST 方法一些疑惑

Chris2233 · 2017年01月10日 · 最后由 Chris2233 回复于 2017年01月10日 · 1466 次阅读

测试 create 方法的时候,这个 user: 代表什么?

# attributes_for(:user)这个是factory_girl的方法
post :create, user: attributes_for(:user)

permitted_params 里的 user key

#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

user_id 是这个 table 的 id 么?如果是的话就把user_id 1 这行删了试试。 还是是另外一个 model 的 reference?

还有个可能就是 namespace 的问题

#7 楼 @cosmosz 是的,属性都是对的,get 的测试都没问题,就是 post 的时候出现这个问题。。。

还有可能就是 user_id 链接的那个 table 里根本没有 id 是 1 的 record

#9 楼 @cosmosz 我好像知道哪错了~~多谢多谢

Chris2233 关闭了讨论 01月10日 11:13
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册