Ruby on rails 基于rspec和factory的测试模型方法

Ruby on rails 基于rspec和factory的测试模型方法,ruby-on-rails,rspec,factory-bot,Ruby On Rails,Rspec,Factory Bot,我在模型中有一个getter/setter方法,用于检索数组的最后一个元素,并将其添加到数组中(Postgresql字符串数组): 提前谢谢 更新:谢谢,我通过测试的修改方法如下: # return the last address from the array def current_address addresses && addresses.last end # add the current address to the array of addresses # i

我在模型中有一个getter/setter方法,用于检索数组的最后一个元素,并将其添加到数组中(Postgresql字符串数组):

提前谢谢

更新:谢谢,我通过测试的修改方法如下:

# return the last address from the array
def current_address
  addresses && addresses.last
end

# add the current address to the array of addresses
# if the current address is not blank and is not the same as the last address
def current_address=(value)
  list = self.addresses
  list ||= []
  if !value.empty? && value != list.last
    list << value
  end
  write_attribute(:addresses, list)
end
#返回数组中的最后一个地址
当前地址
地址&&addresses.last
终止
#将当前地址添加到地址数组中
#如果当前地址不为空且与上一个地址不相同
def当前_地址=(值)
列表=自我地址
列表| |=[]
如果value.empty?&&价值!=最后一个

列表看起来
地址
仅在本地范围内,因此每次调用
当前地址=
时,它都会被清除。请尝试
self.addresses

以下是我认为错误的地方

在测试中,您将替换该数组,而不是向数组中添加元素,因为您正在为该数组指定一个新值

student.current_address = "first address"
student.current_address = "second address"

我认为您应该做的是添加一个新元素,就像您在代码
中所做的那样。谢谢,关于重构我的setter方法以使其更具可读性,有什么建议吗?测试通过了,但是在最初使用self.addresses重写方法之后,整个测试通过了,但是在提交学生表单时它没有更新数据库-是否有更好的方法来测试setter是否在写入时实际更新了数据库(只是感兴趣的是,上面的方法写入正确)。再次感谢您在对象上调用
重新加载
,您将能够确认地址是否正确保留。谢谢。这样做会起作用,但不会测试我的setter方法。
# return the last address from the array
def current_address
  addresses && addresses.last
end

# add the current address to the array of addresses
# if the current address is not blank and is not the same as the last address
def current_address=(value)
  list = self.addresses
  list ||= []
  if !value.empty? && value != list.last
    list << value
  end
  write_attribute(:addresses, list)
end
student.current_address = "first address"
student.current_address = "second address"