Следуя инструкциям Майкла Хартла Rails, я экспериментировал с некоторыми пользовательскими функциями в своем тестовом разделе и сталкивался с тем, что меня удивило. В основном глобальные переменные пути (например, «root_path») работают только в блоке «do ... end» раздела «it» в блоке «описать» тестов RSpec.Rails: RSpec: использование глобальных переменных пути, похоже, работает только внутри блоков «it»
Я считаю, что следующие детали сводятся к вопросу, что особенного в блоке «it», который позволил «root_path» работать там, пока он не работает за пределами блока «it»?
(я определил обходной путь, но мне интересно, есть ли твердое объяснение такого поведения.)
Файл: спецификации/запросы/static_pages_spec.rb
Это не удается:
require 'spec_helper'
def check_stable(path)
it "should be stable" do
get path
response.status.should be(200)
end
end
describe "StaticPages" do
describe "Home => GET" do
check_stable(root_path)
end
end
Это преуспевает:
require 'spec_helper'
describe "StaticPages" do
describe "Home => GET" do
it "should be stable" do
get root_path
response.status.should be(200)
end
end
end
Неудача в основном:
$ bundle exec rspec spec/requests/static_pages_spec.rb
Exception encountered: #<NameError: undefined local variable or method `root_path' for #<Class:0x00000004cecd78>>
... любая идея, почему?
Я попробовал все предложения по этим два резьбу:
Hartl's Tutorial Section 5.3.2: Rails Routes
Никто не работал, пока я не разузнал вопрос выше.
... или внутри 'before: each do' или' after each do'. –
Справедливая точка: легкость модификации - и я ценю, что вы демонстрируете настройку, сохраняя при этом однолинейный тест из «описания». Сохраняет подфункции также более тонкие, если на то пошло. – DreadPirateShawn