Question

controller:

class ProjectsController < ApplicationController
  before_filter :authenticate_user!
  load_and_authorize_resource except: :create
  skip_authorize_resource only: [:update, :destroy]
  rescue_from ActiveRecord::RecordNotFound, with: :record_not_found
  respond_to :json

  def create
    authorize! :create, Project
    project = Project.new(project_params)
    if project.save
      current_user.add_role(:manager, project)
      project.colors.create(user_id: current_user.id)
    end
    respond_with project, serializer: ProjectSerializer
  end
...

spec:

require 'spec_helper'
describe ProjectsController do
  include Devise::TestHelpers
  include UserHelpers

  let (:user) { FactoryGirl.create(:user) }

  before(:each) do
    # controller.stub(:authenticate_user!).and_return true
    sign_in user
    ability_setup
  end

  context "create" do
    it "Can not create project" do
      @ability.cannot :create, Project
      project = {name: 'Test project'}
      post :create, format: 'json', project: project
      expect(response).to be_success
    end
  end
...

if I change last line in test to expect(response).to_not be_success, than all is ok! But if it's like now, I get

Failure/Error: post :create, format: 'json', project: project
     NoMethodError:
       undefined method `authenticate!' for nil:NilClass

why is it so strange error? If I comment before_filter :authenticate_user! in controller, it becomes normal - expected success? to return true, got false

How expect(response) affects authenticate! (which looks like a warden's method?)

Was it helpful?

Solution

looks like the problem is in RSpec::Retry gem, the lines:

config.verbose_retry = true

config.default_retry_count = 3 

causes wrong errors showing by RSpec with Device

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top