【问题标题】:Rspec & large spec files organisationRspec 和大型规范文件组织
【发布时间】:2012-02-10 13:08:16
【问题描述】:

我只是想知道其他人如何组织大型规范文件(尤其是模型),其中许多上下文和部分组织在描述块中,用于验证和其他可以以某种有意义的方式分组的规范。

你们是否将有关模型的所有规范保存在该模型的同一个规范文件中,还是以某种方式拆分为模块?

到目前为止,我从来没有太在意过这一点,但我想知道其他人是怎么做的,因为似乎没有围绕最佳实践等达成某种协议。

对于一些模型,我有一些相当大的规范文件,我想将它们组织成更小的文件,而且不同模型之间几乎没有共享功能,所以我不确定共享示例是否可以去做这个(不管可重用性)或者是否有更好的方法。有什么建议吗?

提前致谢。

【问题讨论】:

  • 我通常将所有内容保存在一个文件中并折叠/展开块以更好地浏览代码。大文件很痛苦,但我从来没有因为懒惰而在类/实例方法、回调/验证等中分离测试......
  • 我猜你可以使用 include 并将每个文件混合到基础中。按照惯例,按目录结构中的类/子类组织文件。我想这就是我要做的,加上下面大卫的回答。谢谢你的杀手锏!

标签: ruby-on-rails ruby testing rspec bdd


【解决方案1】:

嵌套上下文在这里可以为您提供帮助,但要保持浅层(通常是一层深)。在每个示例中需要考虑两个变量:给定(起始状态)和正在调用的方法。您可以按方法或状态对事物进行分组:

# by method
describe Stack do
  describe "#push" do
    it "adds an element to an empty stack"
    it "adds an element to a non-empty stack"
  end

  describe "#pop" do
    it "returns nil from an empty stack"
    it "returns the last element of a non-empty stack"
    it "removes the last element from a non-empty stack"
  end
end

# by state
describe Stack do
  context "when empty" do
    specify "push adds an element"
    specify "pop returns nil"
  end

  context "when not empty" do
    specify "push adds an element"
    specify "pop returns last element"
    specify "pop removes last element"
  end
end

我已经使用了这两种方法,并且看到它们都很好用也很糟糕。这两种方法的关键在于,当您从上到下阅读时,这些示例讲述了一个故事。随着需求的发展,这意味着您需要查看此文件,就像查看您的实现代码一样。 检查规范是否有意义的一种简单方法是使用文档格式化程序运行它:

rspec stack_spec.rb --format documentation

这会按顺序吐出所有名称(前提是您没有使用--order rand):

Stack
  #push
    adds an element to an empty stack
    adds an element to a non-empty stack
  #pop
    returns nil from an empty stack
    returns the last element of a non-empty stack
    removes the last element from a non-empty stack

Stack
  when empty
    push adds an element
    pop returns nil
  when not empty
    push adds an element
    pop returns last element
    pop removes last element

一旦你看到这个输出,你就会很清楚你使用的组织是否有意义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多