我正在尝试重用rails控制器规范中的一些常用代码。对于管理员用户和普通用户,我有不同的上下文。但是,对于特定操作,大部分行为都是相同的,所以我尝试将该常见行为拉出到辅助函数中:
describe SomeController do
def common_get_new
# common stuff
end
context "regular users" do
describe "GET new" do
common_get_new
end
end
context "admin users" do
describe "GET new" do
common_get_new
end
end
end
这给了我错误:
未定义的局部变量或方法`common_get_new'
我做错了什么?
答案 0 :(得分:14)
您是否尝试过使用Shared Examples?
describe SomeController do
shared_examples_for "common_get_new" do
# common stuff
end
context "regular users" do
describe "GET new" do
it_should_behave_like "common_get_new"
end
end
context "admin users" do
describe "GET new" do
it_should_behave_like "common_get_new"
end
end
end
根据问题中common_get_new
方法的内容,为了简单地排除错误,您可以将方法放在 spec / support / utilities.rb 中,或者按照@Chris Heald的建议并在文件顶部定义方法。
答案 1 :(得分:0)
尝试重新排列上下文,以便更深层的上下文可以共享相同的设置代码:
describe SomeController do
describe "GET new" do
before do
# common stuff
end
context "regular users" do
end
context "admin users" do
end
end
end