为了代码重用,我正在构建一个 rspec scriptlets 的外部库(在这里定义为包装 it 块的方法)(就像这样:)
module MyTestSuite
module Scriptlets
module Navigation
def it_will_demo_concept_of_scriptlets
it "will demo concepts of scriptlets" do
...
end
end
def it_will_navigate_to_object(object)
it "will navigate to object" do
....
....actions and expectations go here
....
....
end
end
end
end
end
然后像这样导入:
include MyTestSuite::Scriptlets::Navigation
feature "my tests" do
before(:each) do
@object = create(:my_object)
end
describe "my tests" do
it_will_demo_concept_of_scriptlets
it_will_navigate_to_object(@object.some_param)
end
end
如果navigation scriptlet 被删除,一切运行正常,但是如果它被安装,则会产生以下错误消息:
undefined method 'some_param' for nil:NilClass (NoMethodError)
这似乎表明描述块的主体在之前的条件之前被解析?到底是怎么回事?我该如何解决这个问题?
编辑:
正如下面史蒂夫所建议的那样,我试图通过 shared_examples 重新连接所有内容。
这导致规范作为功能/请求级别规范执行,在每个示例之间刷新被测网页,而不是我正在拍摄的集成级别规范。
代码看起来与上面的示例相同,除了 eachdef
被替换为 a shared_example
,并且“方法”(示例)名称被字符串化并后跟do
,然后被适当地调用。
如果有人知道shared_examples
该问题的基于解决方法,那也很棒。