gpt4 book ai didi

ruby-on-rails - RSpec 测试所有模型是否 respond_to 属性

转载 作者:行者123 更新时间:2023-12-02 22:24:31 25 4
gpt4 key购买 nike

我正在尝试为看似相对简单的测试编写 RSpec 测试,但事实证明它非常棘手(尽管我是 RSpec 的新手)。

简单来说,我想测试我的应用程序中的所有模型是否响应 :owner 或 :owners。

我的第一个问题是遍历所有模型 - 如何在 RSpec 中执行此操作?我通常可以像这样遍历模型:

ActiveRecord::Base.descendants.each { |model|
model.should respond_to :owner
}

但不确定如何在 RSpec 中正确执行此操作?我找不到很多关于在测试中使用循环的文档。

我的第二个问题是关于“OR”子句——我怎样才能实现“响应所有者或所有者”?像这样的东西:

model.should respond_to :owner || :owners

但是我还是找不到很多关于使用 or 子句的文档。

最佳答案

您可以通过测试每个方法并汇总答案来完成 OR 条件:

ActiveRecord::Base.descendants.each do |model|
instance = model.new
expected = instance.respond_to?(:owner) || instance.respond_to?(:owners)
expected.should be_true
end

但这对我来说闻起来不对劲。如果模型将只响应 :owner:owners 之一,您应该测试它是否响应正确的一个。即使这意味着为每个模型创建一个规范(在任何情况下您都应该拥有)并添加一个新示例,从长远来看,您最好通过具体来实现。它还有助于您的代码的 future 维护者,他们希望模型规范位于模型本身的规范文件中,而不是在包罗万象的规范中。

在这种情况下,示例非常小——对于较长的示例,您可以考虑使用 shared example把事情弄干一点。

关于ruby-on-rails - RSpec 测试所有模型是否 respond_to 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13167638/

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