Как реорганизовать вспомогательные методы в файлах RSpec?

#ruby-on-rails #ruby #ruby-on-rails-3 #refactoring #rspec

#ruby-on-rails #ruby #ruby-on-rails-3 #рефакторинг #rspec

Вопрос:

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

 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 ), я получаю следующую ошибку при запуске файла спецификации:

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

Комментарии:

1. У меня была такая же проблема; Это помогло мне: relishapp.com/rspec/rspec-core/docs/helper-methods /…

Ответ №1:

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

 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
  

Комментарии:

1. У меня есть spec/support каталог… как я должен указать (абсолютный или относительный) путь?