Skip to content

undefined method `constant_mutator_for' #2426

@pirj

Description

@pirj

Stack trace:

  1) WorkHistoryCompanyOrator#name when the policy permits show?
     Failure/Error: let(:company) { instance_double(Company, name: FFaker::Company.name) }

     NoMethodError:
       undefined method `constant_mutator_for' for #<RSpec::Mocks::RootSpace:0x00007fe713125ac8>
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-mocks-4d55ed9afdeb/lib/rspec/mocks/mutate_const.rb:87:in `original'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-mocks-4d55ed9afdeb/lib/rspec/mocks/object_reference.rb:145:in `object'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-mocks-4d55ed9afdeb/lib/rspec/mocks/object_reference.rb:129:in `target'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-rails-4e88eb32b479/lib/rspec/rails/active_record.rb:12:in `block (2 levels) in initialize_activerecord_configuration'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-mocks-4d55ed9afdeb/lib/rspec/mocks/example_methods.rb:416:in `block in declare_verifying_double'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-mocks-4d55ed9afdeb/lib/rspec/mocks/example_methods.rb:415:in `each'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-mocks-4d55ed9afdeb/lib/rspec/mocks/example_methods.rb:415:in `declare_verifying_double'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-mocks-4d55ed9afdeb/lib/rspec/mocks/example_methods.rb:58:in `instance_double'
     # ./spec/orators/work_history_company_orator_spec.rb:9:in `block (2 levels) in <top (required)>'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/memoized_helpers.rb:317:in `block (2 levels) in let'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/memoized_helpers.rb:157:in `block (3 levels) in fetch_or_store'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/memoized_helpers.rb:157:in `fetch'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/memoized_helpers.rb:157:in `block (2 levels) in fetch_or_store'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-support-854af33a0902/lib/rspec/support/reentrant_mutex.rb:23:in `synchronize'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/memoized_helpers.rb:156:in `block in fetch_or_store'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/memoized_helpers.rb:155:in `fetch'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/memoized_helpers.rb:155:in `fetch_or_store'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/memoized_helpers.rb:317:in `block in let'
     # ./spec/orators/work_history_company_orator_spec.rb:8:in `block (2 levels) in <top (required)>'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/memoized_helpers.rb:317:in `block (2 levels) in let'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/memoized_helpers.rb:157:in `block (3 levels) in fetch_or_store'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/memoized_helpers.rb:157:in `fetch'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/memoized_helpers.rb:157:in `block (2 levels) in fetch_or_store'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-support-854af33a0902/lib/rspec/support/reentrant_mutex.rb:23:in `synchronize'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/memoized_helpers.rb:156:in `block in fetch_or_store'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/memoized_helpers.rb:155:in `fetch'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/memoized_helpers.rb:155:in `fetch_or_store'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/memoized_helpers.rb:317:in `block in let'
     # ./spec/orators/work_history_company_orator_spec.rb:13:in `block (3 levels) in <top (required)>'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/memoized_helpers.rb:317:in `block (2 levels) in let'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/memoized_helpers.rb:157:in `block (3 levels) in fetch_or_store'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/memoized_helpers.rb:157:in `fetch'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/memoized_helpers.rb:157:in `block (2 levels) in fetch_or_store'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-support-854af33a0902/lib/rspec/support/reentrant_mutex.rb:23:in `synchronize'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/memoized_helpers.rb:156:in `block in fetch_or_store'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/memoized_helpers.rb:155:in `fetch'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/memoized_helpers.rb:155:in `fetch_or_store'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/memoized_helpers.rb:317:in `block in let'
     # /Users/samuelstickland/.gem/ruby/2.7.2/gems/activerecord-6.1.0/lib/active_record/test_fixtures.rb:102:in `run_in_transaction?'
     # /Users/samuelstickland/.gem/ruby/2.7.2/gems/activerecord-6.1.0/lib/active_record/test_fixtures.rb:116:in `setup_fixtures'
     # /Users/samuelstickland/.gem/ruby/2.7.2/gems/activerecord-6.1.0/lib/active_record/test_fixtures.rb:10:in `before_setup'
     # /Users/samuelstickland/.gem/ruby/2.7.2/gems/activejob-6.1.0/lib/active_job/test_helper.rb:45:in `before_setup'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-rails-4e88eb32b479/lib/rspec/rails/adapters.rb:74:in `block (2 levels) in <module:MinitestLifecycleAdapter>'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/example.rb:455:in `instance_exec'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/example.rb:455:in `instance_exec'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/hooks.rb:390:in `execute_with'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/hooks.rb:628:in `block (2 levels) in run_around_example_hooks_for'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/example.rb:350:in `call'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/hooks.rb:629:in `run_around_example_hooks_for'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/hooks.rb:486:in `run'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/example.rb:465:in `with_around_example_hooks'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/example.rb:508:in `with_around_and_singleton_context_hooks'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/example.rb:259:in `run'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/example_group.rb:644:in `block in run_examples'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/example_group.rb:640:in `map'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/example_group.rb:640:in `run_examples'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/example_group.rb:606:in `run'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/example_group.rb:607:in `block in run'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/example_group.rb:607:in `map'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/example_group.rb:607:in `run'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/example_group.rb:607:in `block in run'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/example_group.rb:607:in `map'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/example_group.rb:607:in `run'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/runner.rb:121:in `block (3 levels) in run_specs'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/runner.rb:121:in `map'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/runner.rb:121:in `block (2 levels) in run_specs'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/configuration.rb:2067:in `with_suite_hooks'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/runner.rb:116:in `block in run_specs'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/reporter.rb:74:in `report'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/runner.rb:115:in `run_specs'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/runner.rb:89:in `run'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/runner.rb:71:in `run'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/lib/rspec/core/runner.rb:45:in `invoke'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bundler/gems/rspec-core-addcfb47cb05/exe/rspec:4:in `<top (required)>'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bin/rspec:23:in `load'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bin/rspec:23:in `<top (required)>'
     # /Users/samuelstickland/.rubies/ruby-2.7.2/lib/ruby/2.7.0/bundler/cli/exec.rb:63:in `load'
     # /Users/samuelstickland/.rubies/ruby-2.7.2/lib/ruby/2.7.0/bundler/cli/exec.rb:63:in `kernel_load'
     # /Users/samuelstickland/.rubies/ruby-2.7.2/lib/ruby/2.7.0/bundler/cli/exec.rb:28:in `run'
     # /Users/samuelstickland/.rubies/ruby-2.7.2/lib/ruby/2.7.0/bundler/cli.rb:476:in `exec'
     # /Users/samuelstickland/.rubies/ruby-2.7.2/lib/ruby/2.7.0/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
     # /Users/samuelstickland/.rubies/ruby-2.7.2/lib/ruby/2.7.0/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
     # /Users/samuelstickland/.rubies/ruby-2.7.2/lib/ruby/2.7.0/bundler/vendor/thor/lib/thor.rb:399:in `dispatch'
     # /Users/samuelstickland/.rubies/ruby-2.7.2/lib/ruby/2.7.0/bundler/cli.rb:30:in `dispatch'
     # /Users/samuelstickland/.rubies/ruby-2.7.2/lib/ruby/2.7.0/bundler/vendor/thor/lib/thor/base.rb:476:in `start'
     # /Users/samuelstickland/.rubies/ruby-2.7.2/lib/ruby/2.7.0/bundler/cli.rb:24:in `start'
     # /Users/samuelstickland/.rubies/ruby-2.7.2/lib/ruby/gems/2.7.0/gems/bundler-2.1.4/libexec/bundle:46:in `block in <top (required)>'
     # /Users/samuelstickland/.rubies/ruby-2.7.2/lib/ruby/2.7.0/bundler/friendly_errors.rb:123:in `with_friendly_errors'
     # /Users/samuelstickland/.rubies/ruby-2.7.2/lib/ruby/gems/2.7.0/gems/bundler-2.1.4/libexec/bundle:34:in `<top (required)>'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bin/bundle:23:in `load'
     # /Users/samuelstickland/.gem/ruby/2.7.2/bin/bundle:23:in `<main>'

 1/1 |===================================================== 100 ======================================================>| Time: 00:00:00

Finished in 0.77624 seconds (files took 7.92 seconds to load)
1 example, 1 failure

Failed examples:

rspec ./spec/orators/work_history_company_orator_spec.rb:20 # WorkHistoryCompanyOrator#name when the policy permits show?

Randomized with seed 3920

This is the full spec:

require 'rails_helper'

describe WorkHistoryCompanyOrator do
  include Support::Policy

  i18n_key 'work_history_company_orator'

  let(:work_history) { instance_double(WorkHistory, company: company) }
  let(:company) { instance_double(Company, name: FFaker::Company.name) }

  describe '#name' do
    let(:policy) { instance_double(ExpertProfilePolicy) }
    subject(:name) { WorkHistoryCompanyOrator.new(work_history, policy: policy).name }

    before { allow(policy).to receive(:show_work_history?).with(work_history).and_return(show) }

    context 'when the policy permits show?' do
      let(:show) { true }

      it { is_expected.to eq company.name }
    end

    context 'when the policy forbid show?' do
      let(:show) { false }

      it { is_expected.to eq t('.hidden_company') }
    end
  end
end

And the model we are trying to create an instance double for is simply:

class Company < ApplicationRecord
end

Originally posted by @samstickland in #2417 (comment)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions