gpt4 book ai didi

ruby-on-rails - Rspec 和大型规范文件组织

转载 作者:数据小太阳 更新时间:2023-10-29 06:29:47 26 4
gpt4 key购买 nike

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

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

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

对于某些模型,我有一些非常大的规范文件,我想将它们组织成较小的文件,而且不同模型之间几乎没有或没有共享功能,所以我不确定共享示例是否可以解决这个问题(无论可重用性如何)或者是否有更好的方法。有什么建议吗?

提前致谢。

最佳答案

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

# 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

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

关于ruby-on-rails - Rspec 和大型规范文件组织,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9228282/

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