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

时间:2012-12-27 21:38:22

标签: rspec code-reuse

我正在尝试重用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'

我做错了什么?

2 个答案:

答案 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