5

我正在尝试在 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”

我究竟做错了什么?

4

2 回答 2

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

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

于 2012-12-28T04:06:52.893 回答
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
于 2012-12-28T00:53:13.400 回答