Могу ли я получить доступ к методам Application Helper в запросе RSpec?

Учитывая, что у меня есть метод full_title в модуле ApplicationHelper, как я могу получить к нему доступ в спецификации запроса RSpec?

Теперь у меня есть следующий код:

app/helpers/application_helper.rb

    module ApplicationHelper

    # Returns the full title on a per-page basis.
    def full_title(page_title)
      base_title = "My Site title"
      logger.debug "page_title: #{page_title}"
      if page_title.empty?
         base_title
      else
        "#{page_title} - #{base_title}"
      end
    end

spec/requests/user_pages_spec.rb

   require 'spec_helper'

   describe "User Pages" do
      subject { page }

      describe "signup page" do 
          before { visit signup_path }

          it { should have_selector('h2', text: 'Sign up') } 
          it { should have_selector('title', text: full_title('Sign Up')) } 

      end
    end

При запуске этой спецификации я получаю следующее сообщение об ошибке:

NoMethodError: undefined method full_title' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1:0x00000003d43138>

Согласно тестам в учебнике по Rails Майкла Хартла, у меня должен быть доступ вспомогательные методы приложения в моей пользовательской спецификации. Какую ошибку я здесь делаю?


person rohitmishra    schedule 20.09.2012    source источник
comment
У меня точно такой же код, и он работает для меня. Можете ли вы добавить больше информации к вашему сообщению об ошибке? Кроме того, у вас есть репозиторий на github, которым вы можете поделиться?   -  person Paul Fioravanti    schedule 20.09.2012
comment
Вы создали файл utilities.rb с помощью помощника в каталоге spec/support?   -  person veritas1    schedule 20.09.2012
comment
Я проверил ваш код и все спецификации прошли. Вы перенесли свою базу данных и не перезапустили spork?   -  person Paul Fioravanti    schedule 20.09.2012
comment
Затем см. листинг 5.26 в своей книге. Вот как автор сделал хелпер доступным в rspec. Rspec автоматически загрузит файлы в spec/support.   -  person veritas1    schedule 20.09.2012
comment
@ veritas1 Хорошо, я следил за этим списком. Большое спасибо. Можете ли вы добавить это как ответ, чтобы я мог его принять?   -  person rohitmishra    schedule 20.09.2012
comment
@PaulFioravanti Извините, я использовал другую спецификацию без исполняемого помощника full_title. Виноват. Я пропустил файл utlities.rb, как указал @veritas1. Спасибо.   -  person rohitmishra    schedule 20.09.2012


Ответы (3)


Создайте помощника в spec/support/utilities.rb согласно листингу 5.26 книги.

person veritas1    schedule 20.09.2012
comment
Предположительно, он находится в application_helper.rb, потому что вы хотите использовать его в своем приложении. Перемещение его в spec/ предотвратило бы это, и копирование его не очень СУХОЕ. Nultyi - лучший подход. - person Brandon; 14.02.2014
comment
Да, если есть спецификация для вспомогательного метода. - person veritas1; 14.02.2014

Другой вариант — включить его непосредственно в spec_helper.

RSpec.configure do |config|
  ...
  config.include ApplicationHelper
end
person iNulty    schedule 12.06.2013
comment
по крайней мере, для меня это работает только в rails_helper, так как ApplicationHelper еще не загружается при запуске spec_helper (rails 6.0.2) - person Joe Cabezas; 22.08.2020
comment
В rails 5.1 это работало только тогда, когда я добавил include ApplicationHelper непосредственно в файл, а не в блок конфигурации RSpec. - person Cremz; 23.06.2021

Я делаю учебник по Ruby on Rails (версия Rails 4.0), используя самые последние версии каждого драгоценного камня. Я столкнулся с аналогичной проблемой, задаваясь вопросом, как включить ApplicationHelper в спецификации. У меня это работает со следующим кодом:

спец/rails_helper.rb

RSpec.configure do |config|
  ...
  config.include ApplicationHelper
end

спец/запросы/user_pages_spec.rb

require 'rails_helper'

describe "User pages", type: :feature do
  subject { page }

  describe "signup page" do 
    before { visit signup_path }

    it { is_expected.to have_selector('h2', text: 'Sign up') } 
    it { is_expected.to have_selector('title', text: full_title('Sign Up')) } 
  end
end

Gemfile

...
# ruby 2.2.1
gem 'rails', '4.2.1'
...
group :development, :test do
  gem 'rspec-rails', '~> 3.2.1' 
  ...
end

group :test do
  gem 'capybara', '~> 2.4.4'
  ...
person mnishiguchi    schedule 19.05.2015