Skip to content

Instantly share code, notes, and snippets.

@shingara
Created November 28, 2012 15:00
Show Gist options
  • Save shingara/4161813 to your computer and use it in GitHub Desktop.
Save shingara/4161813 to your computer and use it in GitHub Desktop.
$ rspec -b -I. search_spec.rb [16:15:14]
An error occurred in an around(:each) hook
RuntimeError: can't modify frozen Class
occurred at /Users/cyrilmougel/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-mocks-2.12.0/lib/rspec/mocks/method_double.rb:152:in `remove_method'
F
Failures:
1) Search#boats return Array
Failure/Error: search.boats.should be_a(Array)
RuntimeError:
can't modify frozen Array
# /Users/cyrilmougel/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-mocks-2.12.0/lib/rspec/mocks/proxy.rb:118:in `record_message_received'
# /Users/cyrilmougel/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-mocks-2.12.0/lib/rspec/mocks/test_double.rb:69:in `method_missing'
# ./search.rb:9:in `block in boats'
# ./search.rb:8:in `tap'
# ./search.rb:8:in `boats'
# /Users/cyrilmougel/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/adamantium-0.0.3/lib/adamantium/module_methods.rb:80:in `call'
# /Users/cyrilmougel/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/adamantium-0.0.3/lib/adamantium/module_methods.rb:80:in `block (2 levels) in define_memoize_method'
# /Users/cyrilmougel/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/adamantium-0.0.3/lib/adamantium/module_methods.rb:79:in `fetch'
# /Users/cyrilmougel/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/adamantium-0.0.3/lib/adamantium/module_methods.rb:79:in `block in define_memoize_method'
# ./search_spec.rb:11:in `block (2 levels) in <top (required)>'
# /Users/cyrilmougel/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.0/lib/rspec/core/example.rb:114:in `instance_eval'
# /Users/cyrilmougel/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.0/lib/rspec/core/example.rb:114:in `block in run'
# /Users/cyrilmougel/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.0/lib/rspec/core/example.rb:254:in `with_around_each_hooks'
# /Users/cyrilmougel/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.0/lib/rspec/core/example.rb:111:in `run'
# /Users/cyrilmougel/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.0/lib/rspec/core/example_group.rb:388:in `block in run_examples'
# /Users/cyrilmougel/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.0/lib/rspec/core/example_group.rb:384:in `map'
# /Users/cyrilmougel/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.0/lib/rspec/core/example_group.rb:384:in `run_examples'
# /Users/cyrilmougel/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.0/lib/rspec/core/example_group.rb:369:in `run'
# /Users/cyrilmougel/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.0/lib/rspec/core/command_line.rb:28:in `block (2 levels) in run'
# /Users/cyrilmougel/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.0/lib/rspec/core/command_line.rb:28:in `map'
# /Users/cyrilmougel/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.0/lib/rspec/core/command_line.rb:28:in `block in run'
# /Users/cyrilmougel/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.0/lib/rspec/core/reporter.rb:34:in `report'
# /Users/cyrilmougel/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.0/lib/rspec/core/command_line.rb:25:in `run'
# /Users/cyrilmougel/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.0/lib/rspec/core/runner.rb:69:in `run'
# /Users/cyrilmougel/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.0/lib/rspec/core/runner.rb:8:in `block in autorun'
Finished in 0.0036 seconds
1 example, 1 failure
Failed examples:
rspec ./search_spec.rb:7 # Search#boats return Array
require 'adamantium'
class Search
include Adamantium
def boats
[].tap do |_boats|
request.boats.each do |boat|
_boats << Sedna::Boat.new(boat)
end
end
end
memoize :boats
def request
SearchRequest.new
end
memoize :request
end
require 'search'
class SearchRequest
end
module IceNine
class Freezer
class Spec < NoFreeze
end
end
end
describe Search, '#boats' do
let(:search) { Search.new }
it 'return Array' do
SearchRequest.should_receive(:new).and_return(
double(:search_request, :boats => [{}])
)
search.boats.should be_a(Array)
end
end
@mbj
Copy link

mbj commented Nov 28, 2012

Solution + Refactoring into simpler code:

def boats
  request.boats.map do |attributes|
     boats << Sedna::Boat.new(attributes)
  end
end
memoize  :boats, :freezer => :flat

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment