Ruby on rails Rspec:| |=运算符重复计算代码
我正在使用rspec进行测试。我有一段代码:Ruby on rails Rspec:| |=运算符重复计算代码,ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,我正在使用rspec进行测试。我有一段代码: class Service def execute all_users.update_all(status: 'deactive') end def all_users @all_users ||= User.status_active end end 我有以下两个期望: expect(service.all_users.count).to eq 10 service.execute expect(service.
class Service
def execute
all_users.update_all(status: 'deactive')
end
def all_users
@all_users ||= User.status_active
end
end
我有以下两个期望:
expect(service.all_users.count).to eq 10
service.execute
expect(service.all_users.count).to eq 0
它们都返回true
。这意味着我第一次调用所有用户
,它会被评估一次。在第二次调用中,all_users
再次被评估,这一次是因为我已将所有用户的状态更改为deactive
,并且总活动用户数为零
||=
运算符仅在第一次计算变量的代码。为什么我的代码会再次在上面被评估?我怀疑用户。所有
都是一个作用域或一个类方法,它执行类似于的where(status:'active')
在这种情况下,
User.all\u users
返回的不是模型集合,而是一个延迟计算的SQL查询。当您编写User.status\u active
时,您实际上进行了一个新的SQL查询并获得了实际数据我怀疑User。所有的\u用户
都是一个作用域或类方法,其作用类似于where(status:'active')
在这种情况下,
User.all\u users
返回的不是模型集合,而是一个延迟计算的SQL查询。当您编写User.status\u active
时,您实际上进行了一个新的SQL查询,并获得了实际数据安德里所说的是真的;保存在@all_users
中的值不仅仅是一个数组或列表,它是一个ActiveRecord
关系。当您调用all\u users.count
时,它将进行数据库查询以确定结果。安德里所说的是真的;保存在@all_users
中的值不仅仅是一个数组或列表,它是一个ActiveRecord
关系。当您调用all\u users.count
时,它将进行db查询以确定结果。service.object\u id在所有三种情况下都相同吗?service.object\u id在所有三种情况下都相同吗?