不同rspec上下文中的代码重用

mus*_*oom 5 code-reuse rspec

我试图在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
Run Code Online (Sandbox Code Playgroud)

这给了我错误:

undefined局部变量或方法`common_get_new'

我究竟做错了什么?

Pau*_*nti 14

您是否尝试过使用共享示例

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
Run Code Online (Sandbox Code Playgroud)

根据common_get_new您问题中方法的内容,为了简单地消除错误,您可以将方法放在spec/support/utilities.rb中,或者像@Chris Heald建议的那样,并在顶部定义方法文件.