gpt4 book ai didi

ruby-on-rails - 如何在 rspec 中测试 ActiveRecords 的集合?

转载 作者:行者123 更新时间:2023-12-04 06:26:27 25 4
gpt4 key购买 nike

我喜欢 RSpec,我真的很喜欢它的 =~ 数组运算符匹配器来验证数组是否包含一组特定的元素,而不考虑顺序。

但不出所料,它测试的是指针相等性,而不是内容相等性,因此以下内容不起作用:

class Flea < ActiveRecord::Base ; end
class Dog < ActiveRecord::Base
has_many :fleas
end

@d = Dog.create
@d.fleas << (@f1 = Flea.create)
@d.fleas << (@f2 = Flea.create)

@d.fleas.should =~ [@f1, @f2]

所以我发现自己经常在我的 RSpec 测试中写这个:

@d.fleas.map {|f| f.id}.should =~ [@f1.id, @f2.id]

...散发出bad code smell 的味道. RSpec 是否提供了一种更好的方法来验证 ActiveRecord 对象的集合,而不考虑返回的顺序?或者至少有更好的方法来编写这样的测试吗?

最佳答案

ActiveRecord::Relations 不像数组那样工作(如您所见)。参见 Issue #398 on the GitHub RSpec-Rails Issue board .

答案是将这行代码添加到您的spec_helper.rb:

RSpec::Matchers::OperatorMatcher.register(ActiveRecord::Relation, '=~', RSpec::Matchers::MatchArray)

关于ruby-on-rails - 如何在 rspec 中测试 ActiveRecords 的集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7060402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com