0

我有一个测试,需要设置一些数据库状态:

before do
  Site.first.update_attribute(:primary_domain, @params[:order][:primary_domain])
end

但是,由于某种原因,这修改了@params:

before do
  @params[:order][:primary_domain].must_equal "example.com"
  Site.first.update_attribute(:primary_domain, @params[:order][:primary_domain])
  @params[:order][:primary_domain].must_equal "example.com"
end

这失败了,第二个@params[:order][:primary_domain].must_equal "example.com"失败了,那里更新了一些东西@params[:order][:primary_domain]。奇怪的是,我本以为update_attribute(name, value)不会碰value,但不知何故,它确实如此。

可以用.dup. 但我对可能导致这种情况的原因很感兴趣。这可能是范围问题吗?可能与我正在使Site.primary_domainon正常化这一事实有关save吗?

# Override the primary_domain setter.
# Allows us to normalise the domain
def primary_domain=(primary_domain)
  return primary_domain unless primary_domain.is_a?(String)
  write_attribute(:primary_domain, Site.parse_uri(primary_domain.dup).host)
end
4

0 回答 0