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

Chris2233 · 发布于 2017年01月10日 · 最后由 Chris2233 回复于 2017年01月10日 · 434 次阅读
96

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

# attributes_for(:user)这个是factory_girl的方法
post :create, user: attributes_for(:user)
共收到 10 条回复
96

permitted_params 里的user key

96

#1楼 @cosmosz 谢谢,顿悟

96

#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"
96

这个错误是告诉你数据库必须有个user_id column, 你创建的时候要有user_id。 如果你要用attributes_for的话,可以修改为attributes_for(:user, user_id: 123) 或者直接去user factory, 把user/user_id 加上。

96

#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
96

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

96

还有个可能就是namespace的问题

96

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

96

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

96

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

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