Подтвердить что ты не робот

Как вызвать метод помощника приложения из теста RSpec в Rails?

Название самоочевидно.

Все, что я попробовал, привело к "методу undefined".

Чтобы уточнить, я не пытаюсь проверить вспомогательный метод. Я пытаюсь использовать вспомогательный метод в тесте интеграции.

4b9b3361

Ответ 1

Вам просто нужно включить соответствующий вспомогательный модуль в свой тест, чтобы сделать доступные методы:

describe "foo" do
  include ActionView::Helpers

  it "does something with a helper method" do
    # use any helper methods here

Это действительно так просто.

Ответ 2

Для тех, кто опаздывает на этот вопрос, он отвечает на Relish сайте.

require "spec_helper"

describe "items/search.html.haml" do
  before do
    controller.singleton_class.class_eval do
      protected
      def current_user
        FactoryGirl.build_stubbed(:merchant)
      end
      helper_method :current_user
    end
  end

  it "renders the not found message when @items is empty" do
    render

    expect(
      rendered
    ).to match("Sorry, we can't find any items matching "".")
  end
end

Ответ 3

Если вы пытаетесь использовать вспомогательный метод в своем тесте просмотра, вы можете пойти со следующим:

before do
  view.extend MyHelper
end

Он должен находиться внутри блока describe.

Он работает для меня на рельсах 3.2 и rspec 2.13

Ответ 4

На основе Сообщение Томаса Рибуле на Coderwall:

В начале вашего файла спецификации добавьте следующее:

def helper
  Helper.instance
end

class Helper
  include Singleton
  include ActionView::Helpers::NumberHelper
end

а затем вызовите конкретный помощник с helper.name_of_the_helper.

Этот конкретный пример включает ActionView NumberHelper. Мне нужен UrlHelper, поэтому я сделал include ActionView::Helpers::UrlHelper и helper.link_to.

Ответ 5

Как вы можете видеть здесь https://github.com/rspec/rspec-rails, вы должны инициализировать каталог spec/(где спецификации будут находиться):

$ rails generate rspec:install

это создаст rails_helper.rb с опцией

config.infer_spec_type_from_file_location!

и, наконец, потребует новый rails_helper в helper_spec.rb вместо того, чтобы требовать "spec_helper".

require 'rails_helper'
describe ApplicationHelper do
  ...
end

Удачи.

Ответ 6

Я предполагаю, что вы пытаетесь проверить вспомогательный метод. Для этого вам нужно поместить ваш файл spec в spec/helpers/. Учитывая, что вы используете драгоценный камень rspec-rails, это предоставит вам метод helper, который позволяет вам называть любой вспомогательный метод.

Вот хороший пример в официальной документации rspec-rails:

require "spec_helper"

describe ApplicationHelper do
  describe "#page_title" do
    it "returns the default title" do
      expect(helper.page_title).to eq("RSpec is your friend")
    end
  end
end