Rails / RSpec - 来自同一浏览器/会话/用户的模拟请求(未登录)。检查是否在先前的请求中设置了cookie

时间:2017-01-20 08:25:37

标签: ruby-on-rails ruby rspec

我有推荐系统。因此,如果用户(尚未注册)访问链接,则会设置Cookie。

application_controller.rb

before_action :set_referral

def set_referral
  if params[:referral_token].present?
    cookies.permanent[:referral_token] = params[:referral_token]
  end
end

然后用户可以做任何他们想做的事情,如果他们稍后注册,我想检查该推荐令牌以便为推荐用户提供信用。

  1. 这是一个很好/最好的方法吗?

  2. 如何在RSpec中测试?我基本上只需要访问一条路线来设置令牌,然后注册。

  3. referral_spec.rb

    get "/some-route", params: {referral_token: "123abc"}, headers: something_here_maybe? 
    post "/users", params: user_registration_params, headers: same_as_previous_user
    

    RSpec中是否还有确保两个请求都来自同一个浏览器会话?我对cookies / sessions /等没有多少经验。所以也许我的整个理解在这里是错误的。有没有办法测试这个?有没有更好的方法来实现这一目标?

1 个答案:

答案 0 :(得分:0)

  1. 这是一个很好的方法
  2. 要对此进行测试,您可以使用以下规格:
  3. 检查controller specs是否正确设置了Cookie:

    it 'sets a cookie with referral code when it is present in params' do
      get root_path, { referral_code: 'myreferralcode' }
    
      expect(response.cookies['referral_code']).to eq('myreferralcode')
    end
    

    如果您想测试完整路径,例如当使用推荐代码设置cookie并且用户注册并且您想要检查模型上是否设置了推荐代码时,您应该使用feature specs