检查.empty?销毁后不工作

Checking .empty? after destroy not working

我编写了一个测试来检查来自同一公司内用户的推荐。在断言中,我检查引用是否为空,然后 运行 destroy_referrals 方法,最后检查引用是否为空。 assert referrals.empty? 返回失败,

1) Failure: CompanyTest#test_destroy_referrals_with_referrals [test/models/company_test.rb:634]: Expected false to be truthy.

company_test.rb

def test_destroy_referrals_with_referrals
    company = companies(:default)
    referrals = company.users.map {|u| u.referrals unless u.referrals.empty?}.uniq.compact

    assert !referrals.empty?
    company.destroy_referrals
    assert referrals.empty?
end

我原以为最后一个断言会确认引用已被删除。知道为什么会失败吗?

问题是你提前准备好了推荐人,从来没有改过。要使测试通过,您应该重新加载它们:

def test_destroy_referrals_with_referrals
    company = companies(:default)
    referrals = -> { company.users.map(&:referrals).reject(&:empty?) }

    assert !referrals.().empty?
    company.destroy_referrals
    assert referrals.().empty?
end

Referrals 是一个数组对象。你加载它一次,它就留在内存中。为什么您希望它发生变化?

重新阅读。

referrals = company.users.map {|u| u.referrals unless u.referrals.empty?}.uniq.compact

assert !referrals.empty?
company.destroy_referrals

company.reload # just for good measure
referrals = company.users.map {|u| u.referrals unless u.referrals.empty?}.uniq.compact
assert referrals.empty?