【发布时间】:2018-08-30 01:42:00
【问题描述】:
我正在尝试从 Helpers 模块中递归声明 Rspec 中的上下文。
(我的代码将以一种不寻常的方式使用这些上下文,即递归地对嵌套哈希中的键进行断言。也许我可以用不同的方式解决这个问题,但这不是重点。)
一个最小的完整示例是:
module Helpers
def context_bar
context "bar" do
it "baz" do
expect(true).to be true
end
end
end
end
include Helpers
describe "foo" do
Helpers.context_bar
end
如果我现在在 Rspec 中执行此代码,它会失败:
RuntimeError:
Creating an isolated context from within a context is not allowed. Change `RSpec.context` to `context` or move this to a top-level scope.
然后我可以这样重构它:
def context_bar
context "bar" do
it "baz" do
expect(true).to be true
end
end
end
describe "foo" do
context_bar
end
这对我来说很好用,尽管我失去了在模块名称空间中使用此方法和类似方法所带来的可读性优势。
我有什么办法可以完成这项工作吗?
(请注意,这个问题与 this 或 Rspec 文档中的 here 等其他问题有表面上的相似性。这似乎使 Helpers 在示例中可用,但它不允许我实际声明上下文。)
【问题讨论】:
-
您提供的示例可能会通过共享示例更好地解决:relishapp.com/rspec/rspec-core/v/3-7/docs/example-groups/…您有理由不使用它吗?
-
没有理由,如果可以这样做的话。
-
好的,我认为这可能是一种智力挑战;)在这种情况下——共享示例是可行的方法——它们完全是一种提取可重复上下文和示例的方法。
-
谢谢,那我去看看。
-
其实不行。然后我遇到:
can't include shared examples recursively.