Tom Opgenorth
Tom Opgenorth

Reputation: 1511

specs failing in Rails 3.1 - NoMethodError: private method 'rand' called for Array

I'm getting a weird error all of a sudden when I run my spec, which is then causing my specs to fail. These specs worked find before - but recently we upgraded from Rails 3.0 -> Rails 3.1. It seems like machinist is having some problems trying to create the data for my tests, but I don't quite get why 'rand' all of a sudden isn't available.

Anything thoughs/tips would be greatly appreciated.

Here is the line in my blueprint:

Invoice.blueprint do
  invno { Faker::Base.bothify(["#######", "N######", "C######"].rand) }
  order_no { Faker::Base.numerify("N######") }

Here is some information about my environment -

ruby -v:

ruby 1.9.2p290 (2011-07-09 revision 32553) [i686-linux]

rvm and rvm list (to show my gemset):

rvm 1.8.5 by Wayne E. Seguin ([email protected]) [https://rvm.beginrescueend.com/]

=> ruby-1.9.2-p290 [ i386 ]

And here is the error that is happening:

NoMethodError: private method `rand' called for ["#######", "N######", "C######"]:Array
/home/tom/work/ruby/litdistco-sales/spec/blueprints.rb:93:in `block (2 levels) in <top (required)>'
/home/tom/work/ruby/litdistco-sales/foreman/ruby/1.9.1/gems/machinist-1.0.6/lib/machinist.rb:77:in `generate_attribute_value'
/home/tom/work/ruby/litdistco-sales/foreman/ruby/1.9.1/gems/machinist-1.0.6/lib/machinist.rb:46:in `method_missing'
/home/tom/work/ruby/litdistco-sales/spec/blueprints.rb:93:in `block in <top (required)>'
/home/tom/work/ruby/litdistco-sales/foreman/ruby/1.9.1/gems/machinist-1.0.6/lib/machinist.rb:20:in `instance_eval'
/home/tom/work/ruby/litdistco-sales/foreman/ruby/1.9.1/gems/machinist-1.0.6/lib/machinist.rb:20:in `run'
/home/tom/work/ruby/litdistco-sales/foreman/ruby/1.9.1/gems/machinist-1.0.6/lib/machinist/active_record.rb:53:in `make'
/home/tom/work/ruby/litdistco-sales/spec/models/invoice_sales_tax_assignment_mixin_spec.rb:7:in `block (3 levels) in <top (required)>'
/home/tom/work/ruby/litdistco-sales/foreman/ruby/1.9.1/gems/rspec-core-2.6.4/lib/rspec/core/hooks.rb:35:in `instance_eval'
/home/tom/work/ruby/litdistco-sales/foreman/ruby/1.9.1/gems/rspec-core-2.6.4/lib/rspec/core/hooks.rb:35:in `run_in'
/home/tom/work/ruby/litdistco-sales/foreman/ruby/1.9.1/gems/rspec-core-2.6.4/lib/rspec/core/hooks.rb:70:in `block in run_all'
/home/tom/work/ruby/litdistco-sales/foreman/ruby/1.9.1/gems/rspec-core-2.6.4/lib/rspec/core/hooks.rb:70:in `each'
/home/tom/work/ruby/litdistco-sales/foreman/ruby/1.9.1/gems/rspec-core-2.6.4/lib/rspec/core/hooks.rb:70:in `run_all'
/home/tom/work/ruby/litdistco-sales/foreman/ruby/1.9.1/gems/rspec-core-2.6.4/lib/rspec/core/hooks.rb:116:in `run_hook'
/home/tom/work/ruby/litdistco-sales/foreman/ruby/1.9.1/gems/rspec-core-2.6.4/lib/rspec/core/example_group.rb:221:in `block in eval_before_eachs'
/home/tom/work/ruby/litdistco-sales/foreman/ruby/1.9.1/gems/rspec-core-2.6.4/lib/rspec/core/example_group.rb:221:in `each'
/home/tom/work/ruby/litdistco-sales/foreman/ruby/1.9.1/gems/rspec-core-2.6.4/lib/rspec/core/example_group.rb:221:in `eval_before_eachs'
/home/tom/work/ruby/litdistco-sales/foreman/ruby/1.9.1/gems/rspec-core-2.6.4/lib/rspec/core/example.rb:145:in `run_before_each'
/home/tom/work/ruby/litdistco-sales/foreman/ruby/1.9.1/gems/rspec-core-2.6.4/lib/rspec/core/example.rb:47:in `block in run'
/home/tom/work/ruby/litdistco-sales/foreman/ruby/1.9.1/gems/rspec-core-2.6.4/lib/rspec/core/example.rb:107:in `with_around_hooks'
/home/tom/work/ruby/litdistco-sales/foreman/ruby/1.9.1/gems/rspec-core-2.6.4/lib/rspec/core/example.rb:45:in `run'
/home/tom/work/ruby/litdistco-sales/foreman/ruby/1.9.1/gems/rspec-core-2.6.4/lib/rspec/core/example_group.rb:294:in `block in run_examples'
/home/tom/work/ruby/litdistco-sales/foreman/ruby/1.9.1/gems/rspec-core-2.6.4/lib/rspec/core/example_group.rb:290:in `map'
/home/tom/work/ruby/litdistco-sales/foreman/ruby/1.9.1/gems/rspec-core-2.6.4/lib/rspec/core/example_group.rb:290:in `run_examples'
/home/tom/work/ruby/litdistco-sales/foreman/ruby/1.9.1/gems/rspec-core-2.6.4/lib/rspec/core/example_group.rb:262:in `run'
/home/tom/work/ruby/litdistco-sales/foreman/ruby/1.9.1/gems/rspec-core-2.6.4/lib/rspec/core/example_group.rb:263:in `block in run'
/home/tom/work/ruby/litdistco-sales/foreman/ruby/1.9.1/gems/rspec-core-2.6.4/lib/rspec/core/example_group.rb:263:in `map'
/home/tom/work/ruby/litdistco-sales/foreman/ruby/1.9.1/gems/rspec-core-2.6.4/lib/rspec/core/example_group.rb:263:in `run'
/home/tom/work/ruby/litdistco-sales/foreman/ruby/1.9.1/gems/rspec-core-2.6.4/lib/rspec/core/command_line.rb:24:in `block (2 levels) in run'
/home/tom/work/ruby/litdistco-sales/foreman/ruby/1.9.1/gems/rspec-core-2.6.4/lib/rspec/core/command_line.rb:24:in `map'
/home/tom/work/ruby/litdistco-sales/foreman/ruby/1.9.1/gems/rspec-core-2.6.4/lib/rspec/core/command_line.rb:24:in `block in run'
/home/tom/work/ruby/litdistco-sales/foreman/ruby/1.9.1/gems/rspec-core-2.6.4/lib/rspec/core/reporter.rb:12:in `report'
/home/tom/work/ruby/litdistco-sales/foreman/ruby/1.9.1/gems/rspec-core-2.6.4/lib/rspec/core/command_line.rb:21:in `run'
/home/tom/work/ruby/litdistco-sales/foreman/ruby/1.9.1/gems/rspec-core-2.6.4/lib/rspec/core/runner.rb:80:in `run_in_process'
/home/tom/work/ruby/litdistco-sales/foreman/ruby/1.9.1/gems/rspec-core-2.6.4/lib/rspec/core/runner.rb:69:in `run'
/home/tom/work/ruby/litdistco-sales/foreman/ruby/1.9.1/gems/rspec-core-2.6.4/lib/rspec/core/runner.rb:11:in `block in autorun'

Upvotes: 3

Views: 2014

Answers (1)

kgpdeveloper
kgpdeveloper

Reputation: 2119

Use "sample" instead of "rand".

Refer to:

http://www.ruby-forum.com/topic/383479

Upvotes: 5

Related Questions