web-dev-qa-db-fra.com

Comment appeler une méthode d'assistance d'application à partir d'un test RSpec dans Rails?

Le titre est explicite.

Tout ce que j'ai essayé a conduit à une "méthode indéfinie".

Pour clarifier, je n'essaye pas de tester une méthode d'assistance. J'essaie d'utiliser une méthode d'assistance dans un test d'intégration.

28
Helio Santos

Vous devez simplement inclure le module d'aide approprié dans votre test pour rendre les méthodes disponibles:

describe "foo" do
  include ActionView::Helpers

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

C'est aussi simple que ça.

26
Chris Salzberg

Pour ceux qui arrivent en retard à cette question, il est répondu sur le site 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
8
Mark Paine

Si vous essayez d'utiliser une méthode d'assistance dans votre test de vue, vous pouvez utiliser les éléments suivants:

before do
  view.extend MyHelper
end

Il doit être dans un bloc describe.

Cela fonctionne pour moi sur Rails 3.2 et Rspec 2.13

4
fotanus

Basé sur le message de Thomas Riboulet sur Coderwall :

Au début de votre fichier de spécifications, ajoutez ceci:

def helper
  Helper.instance
end

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

puis appelez un assistant particulier avec helper.name_of_the_helper.

Cet exemple particulier inclut le NumberViewer d'ActionView . J'avais besoin de UrlHelper , alors j'ai include ActionView::Helpers::UrlHelper et helper.link_to.

1
Alex Popov

Comme vous pouvez le voir ici https://github.com/rspec/rspec-Rails , vous devez initialiser le répertoire spec/(où les spécifications figureront) avec:

$ Rails generate rspec:install

cela générera un Rails_helper.rb avec l'option

config.infer_spec_type_from_file_location!

et enfin, exigez le nouveau Rails_helper dans votre fichier helper_spec.rb au lieu de «spec_helper». 

require 'Rails_helper'
describe ApplicationHelper do
  ...
end

bonne chance. 

0
Hannes