lundi 28 décembre 2015

get :index Rspec error, during unit test for Static Index controller page

I'm currently attempting my first unit test and I'm receiving the following errors

Failures:

1) StaticPagesController GET #index responds successfully with an HTTP 200 status code Failure/Error: get :index

 NoMethodError:
   undefined method `authenticate!' for nil:NilClass
 # /Users/danielmayle/.rvm/gems/ruby-2.2.1/gems/devise-3.5.2/lib/devise/controllers/helpers.rb:112:in `authenticate_user!'
 # ./spec/static_pages_controller_spec.rb:6:in `block (3 levels) in <top (required)>'

2) StaticPagesController GET #index renders the index template Failure/Error: get :index

 NoMethodError:
   undefined method `authenticate!' for nil:NilClass
 # /Users/danielmayle/.rvm/gems/ruby-2.2.1/gems/devise-3.5.2/lib/devise/controllers/helpers.rb:112:in `authenticate_user!'
 # ./spec/static_pages_controller_spec.rb:6:in `block (3 levels) in <top (required)>'

Here is my unit test code:

require 'rails_helper'

describe StaticPagesController, :type => :controller do
  context "GET #index" do
    before do
      get :index
    end

    it "responds successfully with an HTTP 200 status code" do
      expect(response).to be_success
      expect(response).to have_http_status(200)
    end

    it "renders the index template" do
      expect(response).to render_template("index")
    end
  end

end

And here is my static_controller.rb code:

class StaticPagesController < ApplicationController
 def index
 end

def landing_page
    @featured_product = Product.first
end

  def thank_you
    @name = params[:name]
    @email = params[:email]
    @message = params[:message]
    UserMailer.contact_form(@email, @name, @message).deliver_now
  end

end

Why do are these errors coming up and how do I fix the problem? I've only been coding for a few months so any assistance would be much appreciated. Thanks :)

Update

Here is my application controller

class ApplicationController < ActionController::Base
  before_action :authenticate_user!

  before_action :configure_permitted_parameters, if: :devise_controller?


  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception

  rescue_from CanCan::AccessDenied do |exception|
    redirect_to main_app.root_url, :alert => exception.message

  end

  protected
  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) << :username
  end
end

Aucun commentaire:

Enregistrer un commentaire