wake-up-neo.com

Wie rufe ich eine App-Helfer-Methode aus einem RSpec-Test in Rails auf?

Der Titel ist selbsterklärend.

Alles, was ich versucht habe, führte zu einer "undefinierten Methode".

Zur Verdeutlichung versuche ich nicht, eine Hilfsmethode zu testen. Ich versuche, eine Hilfsmethode in einem Integrationstest zu verwenden.

28
Helio Santos

Sie müssen lediglich das entsprechende Hilfsmodul in Ihren Test aufnehmen, um die Methoden verfügbar zu machen:

describe "foo" do
  include ActionView::Helpers

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

Es ist wirklich so einfach.

26
Chris Salzberg

Wer zu spät auf diese Frage kommt, wird auf der Seite Relish beantwortet.

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
8
Mark Paine

Wenn Sie versuchen, eine Hilfemethode für Ihren Ansichtstest zu verwenden, können Sie Folgendes tun:

before do
  view.extend MyHelper
end

Es muss sich innerhalb eines describe-Blocks befinden.

Es funktioniert für mich auf Rails 3.2 und rspec 2.13

4
fotanus

Basierend auf Thomas Riboulets Beitrag auf Coderwall :

Am Anfang Ihrer Spezifikationsdatei fügen Sie Folgendes hinzu:

def helper
  Helper.instance
end

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

und rufen Sie dann mit helper.name_of_the_helper einen bestimmten Helfer an.

Dieses spezielle Beispiel enthält den ActionView-NumberHelper . Ich brauchte die UrlHelper , also habe ich include ActionView::Helpers::UrlHelper und helper.link_to.

1
Alex Popov

Wie Sie hier https://github.com/rspec/rspec-Rails sehen können, sollten Sie das spec/-Verzeichnis (wo sich die Specs befinden) mit:

$ Rails generate rspec:install

dadurch wird eine Rails_helper.rb mit der Option generiert

config.infer_spec_type_from_file_location!

und schließlich benötigen Sie den neuen Rails_helper in Ihrer helper_spec.rb anstelle von 'spec_helper'. 

require 'Rails_helper'
describe ApplicationHelper do
  ...
end

viel Glück. 

0
Hannes