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

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

有如下测试代码


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' 吗?

求测试代码。

@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 的实例变量依然存在而造成的问题

又被自己代码坑了一次

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