Как реорганизовать вспомогательные методы в файлах RSpec? - PullRequest
3 голосов
/ 30 сентября 2011

Я использую Ruby on Rails 3.1.0 и гем rspec-rails 2. Я хотел бы провести рефакторинг следующего кода (я намеренно пропустил некоторый код и дал осмысленные имена для выделения структуры):

describe "D1" do
  # Helper method
  def D1_Method_1
    ...
  end

  context "C1" do
    # Helper methods
    def D1_C1_Method_1
      session.should be_nil # Note: I am using the RoR 'session' hash
      D1_Method_1           # Note: I am calling the 'D1_Method_1' helper method
      ...
    end

    def D1_C1_Method_2
      ...
    end


    it "I1" do
      D1_Method_1
      ...
    end

    it "I2" do
      ...
      D1_C1_Method_1
      D1_C1_Method_2
    end
  end

  context "C2" do
    # Helper methods
    def D1_C2_Method_1
      ...
    end

    def D1_C2_Method_2
      ...
    end


    it "I1" do
      D1_Method_1
      ...
    end

    it "I2" do
      ...
      D1_C2_Method_1
      D1_C2_Method_2
    end
  end
end

Что я могу сделать для рефакторинга вышеуказанного кода?

PS: Я пытался извлечь вспомогательные методы во внешний модуль (с именем Sample), но, например, относящийся к методу D1_C1_Method_1 (который содержит RoR session), я получаю следующую ошибку при запуске spec-файла:

Failure/Error: session.should be_nil
 NameError:
   undefined local variable or method `session' for Sample:Module

1 Ответ

2 голосов
/ 01 октября 2011

Вы пытались включить помощников в качестве внешнего модуля?

require 'path/to/my_spec_helper'

describe "D1" do
  include MySpecHelper
  ...
end

А теперь помощник:

# my_spec_helper.rb
module MySpecHelper
  def D1_C1_Method_1
    session.should be_nil
   ...
  end 
end
...