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
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?)
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