这是我在 RSpec 中使用的一种很好的技术,我也想在使用 Shoulda 和 Shoulda-context 的项目中使用它。但我不知道这是否可能。有没有办法做到这一点?
我想要的是:在外部上下文中定义一个setup
( ) 块,该块引用嵌套上下文中的子句。这样,内部上下文可以配置在外部引用的值,并且仍然可以在内部上下文中是 DRY。before
let
setup
setup
RSpec 示例(此示例很简单——请假设我的真实示例在before
块中有更多我不想复制的代码):
describe Thing do
before do
# Notice that `user` isn't defined here--it's defined in `let` blocks
# in nested contexts below.
login_as user
# Assume there's lots more code here that I would like to keep
# DRY across contexts.
end
context "when logged in as an admin" do
# THIS IS THE MAGIC RIGHT HERE:
let(:user) { Factory(:user, role: "admin") }
it "should ..." ...
end
context "when logged in as a normal user" do
# THIS IS THE MAGIC RIGHT HERE:
let(:user) { Factory(:user) }
it "should ..." ...
end
end
总结一下:我如何使用 shoulda-context 和 Test::Unit 来做到这一点?
我已经尝试过的一些事情没有奏效:
def
在每个子上下文中重新定义一个方法。before_should
在每个子上下文中。