测试 Rails 使用 rspec 测试 controller 的疑惑

xjz19901211 · 2013年10月30日 · 最后由 xjz19901211 回复于 2013年10月30日 · 2480 次阅读

有如下测试代码


it 'xxx' do
   get '/aaa'
   get '/bbb'
end

测试时发现,两次请求都使用的同一个controller实例, 然后我在filter中有一段类似下面的代码


def my_filter
   return @a if @a
   @a = 'xxx'

   # @a ||= 'xxx'
end

在如上代码中,my_filter中被注释的代码执行两次请求时没一点问题,每次@a都是nil 但是到my_filter当前没被注释的代码中,除了第一次@a是nil, 后面再次request时还是上一次的值

现在我想不明白,my_filter 为那么会出现上会情况 ||= 不是 @a = @a || 'xxx' 吗?

共收到 4 条回复

求测试代码。

@liwei78

呃,公司项目里呢

那个my_filter 其实就是一个current_user

def current_user
  @_current_user ||= if xxx
    # xxx
  else
    # xxx
  end
end

被我改成非 ||=格式后真的不行了。。

@liwei78 我发现我又错了,因为我在 @a ||= if xxx then yyy else zzz; end 中间直接return 了,所有没有设置@a,所以没有问题。

而 rspec rails 测试时确实是每个 it 只都只使用一个controller 的实例,多个request后,controller的实例变量依然存在而造成的问题

又被自己代码坑了一次

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册