Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Loading…

URL Helpers not working even with Rails.application.routes.url_helpers included on spec_helper #725

Closed
edelpero opened this Issue · 1 comment

2 participants

@edelpero

Hello, I'm having trouble testing a custom helper. I already included Rails.application.routes.url_helpers on spec_helper.rb, but doesn't work either. Here are all the details of my code:

################################################
#app/helpers/admins/products_helper.rb

module Admins::ProductsHelper
  def product_post_permission(product)
    html = ""

    if product.can_post?
      html << product_action_link(product, cannot_post_admins_product_path(product),
                                "can_post", "btn-success", "icon-lock")
    else
      html << product_action_link(product, can_post_admins_product_path(product),
                                "can_post", "btn-danger", "icon-lock")
    end

    html.html_safe
  end

  def product_published_status(product)
    html = ""

    if product.published?
      html << product_action_link(product, unpublish_admins_product_path(product),
                                "published", "btn-success", "icon-eye-open")
    else
      html << product_action_link(product, publish_admins_product_path(product),
                                "published", "btn-danger", "icon-eye-close")
    end

    html.html_safe
  end

  private

    def product_action_link(product, path, element, button_type, icon)
      link_to path,
              method: :put,
              remote: true,
              id:     dom_id(product, element),
              class: "btn btn-small #{button_type}" do
                "<i class='icon #{icon} icon-white'></i>".html_safe
      end
    end
end

################################################
#spec/helpers/admins/products_helper.rb

require 'spec_helper'

describe Admins::ProductsHelper do

  describe "#product_post_permission" do
    context "when product can do post" do
      before(:each) do
        @product = mock_model(Product, can_post?: true)
      end

      it "creates cannot post link with green button" do
        puts "helper defined" if defined?(Rails.application.routes.url_helpers)
        helpers.should_receive(:product_action_link)
        helpers.product_post_permission(@product)
      end
    end

    context "when product cannot do post" do
      before(:each) do
        @product = mock_model(Product, can_post?: false)
      end

      it "creates can post link with red button" do
        helper.should_receive(:product_action_link)
        helper.product_post_permission(@product)
      end
    end
  end

  describe "#product_published_status" do
    context "when product is published" do
      before(:each) do
        @product = mock_model(Product, published?: true)
      end

      it "creates unpublish link with green button" do
        helper.should_receive(:product_action_link)
        helper.product_published_status(@product)
      end
    end

    context "when product is not published" do
      before(:each) do
        @product = mock_model(Product, published?: false)
      end

      it "creates publish link with red button" do
        helper.should_receive(:product_action_link)
        helper.product_published_status(@product)
      end
    end
  end

end

################################################
#spec/spec_helper.rb

RSpec.configure do |config|
  config.mock_with :rspec
  config.include   Devise::TestHelpers, :type => :controller
  config.include   Paperclip::Shoulda::Matchers
  config.include   Rails.application.routes.url_helpers
end

################################################
#error messages:

Admins::ProductsHelper
  #product_post_permission
    when product can do post
helper defined
      creates cannot post link with green button (FAILED - 1)
    when product cannot do post
      creates can post link with red button (FAILED - 2)
  #product_published_status
    when product is published
      creates unpublish link with green button (FAILED - 3)
    when product is not published
      creates publish link with red button (FAILED - 4)

Failures:

  1) Admins::ProductsHelper#product_post_permission when product can do post creates cannot post link with green button
     Failure/Error: helpers.should_receive(:product_action_link)
     RuntimeError:
       In order to use #url_for, you must include routing helpers explicitly. For instance, `include Rails.application.routes.url_helpers
     # ./spec/helpers/admins/products_helper_spec.rb:13:in `block (4 levels) in <top (required)>'

  2) Admins::ProductsHelper#product_post_permission when product cannot do post creates can post link with red button
     Failure/Error: helper.product_post_permission(@product)
     NoMethodError:
       undefined method `can_post_admins_product_path' for #<#<Class:0xbf55180>:0xbf60378>
     # ./app/helpers/admins/products_helper.rb:9:in `product_post_permission'
     # ./spec/helpers/admins/products_helper_spec.rb:25:in `block (4 levels) in <top (required)>'

  3) Admins::ProductsHelper#product_published_status when product is published creates unpublish link with green button
     Failure/Error: helper.product_published_status(@product)
     NoMethodError:
       undefined method `unpublish_admins_product_path' for #<#<Class:0xbf55180>:0xbf71ccc>
     # ./app/helpers/admins/products_helper.rb:20:in `product_published_status'
     # ./spec/helpers/admins/products_helper_spec.rb:38:in `block (4 levels) in <top (required)>'

  4) Admins::ProductsHelper#product_published_status when product is not published creates publish link with red button
     Failure/Error: helper.product_published_status(@product)
     NoMethodError:
       undefined method `publish_admins_product_path' for #<#<Class:0xbf55180>:0xa1fec08>
     # ./app/helpers/admins/products_helper.rb:23:in `product_published_status'
     # ./spec/helpers/admins/products_helper_spec.rb:49:in `block (4 levels) in <top (required)>'

Finished in 0.08698 seconds
4 examples, 4 failures

Thanks in advance.

@alindeman alindeman referenced this issue from a commit
@alindeman alindeman Adds feature to attempt to demonstrate #725
* I can't reproduce it, so we'll close #725 for now
f4a6250
@alindeman alindeman closed this issue from a commit
@alindeman alindeman Adds feature to attempt to demonstrate #725
* I can't reproduce it, so we'll close #725 for now
f4a6250
@alindeman alindeman closed this in f4a6250
@alindeman
Collaborator

Thanks for your report! Unfortunately I can't reproduce it, and I attempted to add a cucumber feature to demonstrate it (see linked commit). It is green for me locally, though I'll let Travis verify it's green everywhere.

Are you able to demonstrate this in a small Rails app that you can push to GitHub? If so, please link it and I'll use it to dig further :)

@alindeman alindeman referenced this issue from a commit
@alindeman alindeman Adds feature to attempt to demonstrate #725
* I can't reproduce it, so we'll close #725 for now
70bea2b
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.