ruby - "include_examples"和 "it_behaves_like"有什么区别?

标签 ruby rspec

在 RSpec 中,it_behaves_likeinclude_examples 有什么区别?

documentation说:

include_examples — include(s) the examples in the current context

it_behaves_like "name" — include(s) the examples in a nested context

但这到底是什么意思呢?用另一个替换一个似乎对我的测试是通过还是失败没有影响。在某些情况下是否有理由偏爱其中一个?

此外,it_should_behave_likeit_behaves_like 只是同义词吗?

最佳答案

您可能知道如何使用describecontextitspecify 来清楚地传达一个方面你的代码。 it_behaves_like 提供的嵌套上下文可用于改善与读者的这种交流。

我的示例将基于 RSpec 文档中为 shared examples 给出的示例:

shared_examples "a collection" do
  context "initialized with 3 items" do
    it "says it has three items" do
      # ...
    end
  end
end

describe Array do
  it_behaves_like "a collection"
  include_examples "a collection"
end

如果您使用 --format documentation 运行 RSpec,您将获得以下输出:

Array
  behaves like a collection
    initialized with 3 items
      says it has three items
  initialized with 3 items
    says it has three items

所以区别在于如何读取规范,例如在发生故障的情况下。

您喜欢哪种风格是一个审美问题,即您喜欢阅读规范的方式。此外,如果您在团队中工作以提高一致性,您会建议始终使用相同的风格。


Also, are it_should_behave_like and it_behaves_like just synonyms?

几乎,上下文命名不同。 它应该表现得像... vs 表现得像...。又是一个美学问题。

关于ruby - "include_examples"和 "it_behaves_like"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19556296/

相关文章:

ruby-on-rails - Rails 4 + Rails-API + RSpec + Devise - 使用自定义设计路由对 Controller 进行故障测试

ruby - 无法使用 pdfkit 创建 pdf - PDFKit::NoExecutableError

python - 如何配置 vim 以有条件地设置 softtabs?

ruby - RSpec - 如果我避免使用 let、let 和 before,如何实现相同的功能?

ruby - 规范;当属性没有值时验证元素状态

ruby-on-rails - Ruby on Rails : Switch from test_unit to rspec

ruby-on-rails-3 - 我如何将每个 rspec 的描述打印到 Rails.logger?

CSS 未在 Michael Hartl 的 Rail 教程的第 10 章中更新

ruby - 如何卸载 RVM gem?

ruby - 我如何在 Nokogiri 中使用 XPath?