#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
каталог… как я должен указать (абсолютный или относительный) путь?