【问题标题】:Can not set Devise user property sign_in_count in rspec controller test. It is reset to 0 in the controller无法在 rspec 控制器测试中设置设计用户属性 sign_in_count。它在控制器中重置为 0
【发布时间】:2011-06-05 19:09:55
【问题描述】:

我有一个进行测试的控制器:

@first_login = (@user.sign_in_count == 1)

我需要使用 rspec 规范中的设计进行设置:

我尝试了四个想法:在所有这些想法中,用户的创建方式如下:user = Factory(:member) [工厂见下文]

  user.stubs(:sign_in_count).returns(1)
  sign_in user
  get 'index'

  user.sign_in_count = 1 
  sign_in user # here user.sign_in_count == 1
  get 'index'  # here user.sign_in_count == 1

  sign_in user
  sign_in user
  get 'index'

  sign_in user
  user.sign_in_count = 1 
  get 'index'

但每次在控制器中,设计特定的用户属性都会被清零/清零。

reset_password_token: nil, reset_password_sent_at: nil, 
remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, 
last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil

有什么想法吗?

[specs/factories.rb - factory_girl]

Factory.define :member, :class => User do |c|
  c.password "a123456h"
  c.first_name "Jack"
  c.last_name "Lee"
  c.email "jxxxx@example.com"
  c.address_street "123 Main"
  c.address_city "Anytown"
  c.address_state "NV"
  c.address_zip "40455"
  c.address_country "USA"
  c.when_account_created 2.days.ago
  c.change_password_count 3
  c.forgot_password_count 2
  c.created_at 2.days.ago
  c.updated_at 10.hours.ago
end

【问题讨论】:

  • 您是如何创建用户实例的?你用的是固定装置还是工厂女孩?
  • 我已经使用 factory_girl 以及手动创建了实例。发生的情况是控制器似乎获得了与我们设置不同的用户。

标签: ruby-on-rails rspec devise


【解决方案1】:

用户是如何/在哪里开始在规范中创建的?

【讨论】:

  • 我更新了用户的创建方式:user = Factory(:member) with factory girl。嗨,戴夫,我们在 Hashrocket Chicago 的开幕派对上和 Josh 认识的。
【解决方案2】:

保存用户。

似乎我已经在规范中解决了这个问题:

  user = Factory(:customer)
  sign_in user
  user.sign_in_count = 1 
  user.save!
  get 'index'

不确定这是否是按照 devise/warden 的 current_user 辅助方法应该在控制器中使用的方式使用的,但它可以工作。

如果其他人有更好的解释,我会保持打开状态。

【讨论】:

    猜你喜欢
    • 2019-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多