如何在Rspec中测试实例变量

时间:2015-08-09 20:20:43

标签: ruby-on-rails rspec

我在使用Rspec测试外部实例变量时遇到问题。虽然StackOverflow上有一些类似的问题,但我还是找不到在GET请求中测试它的解决方案(因为这是针对API的)。

我有一个ApiController方法可以执行以下操作:

class ApiController < ApplicationController
  ...
  def auth(token)
    @user = User.find_by_token(token)
  ...
end

然后,我有一个看起来像这样的请求规范:

describe 'GET /v1/friends' do
  it 'returns friends' do
    ApiController.any_instance.stub(:auth)
    get "v1/friends"
    ...
  end
end

我收到的错误是undefined method XXX for nil:NilClass,因为@users实例变量没有传递给GET请求。

我尝试过使用assigns()这似乎不起作用,而不是因为其他原因而无法删除auth类。并且,简单地设置实例变量似乎不起作用,因为我已经读过Rspec假设它是它自己的变量而不是测试中使用的变量(?)。

在运行GET请求时,有没有办法将@user实例变量设置为假用户?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我最终重构了很多其他代码来运行在实际控制器中创建实例变量的身份验证方法。我不相信有一种方法可以在Rspec中设置变量以用于GET请求。

使用集成测试来测试authenticate_with_http_token时,您需要在GET请求中包含它:

get '/v1/path-for-api', nil, authorize: 'Token token=#{user.token}'

从那里开始,变量已经正确设置,我能够测试请求。