NoMethodError: undefined method `values' for nil:NilClass
Closed this issue · 1 comments
guigs commented
Given
class Account < ApplicationRecord
extend Enumerize
enumerize :currency, in: %i[eur usd]
def api_params
{
currency: currency.upcase,
version: 2
}
end
end
RSpec.describe Account do
describe '#api_params' do
account = Account.new(currency: 'eur')
it 'returns api params' do
expect(account.api_params).to eq(currency: 'EUR', version: 1)
end
end
end
Expected result when running spec
expected: {:currency=>"EUR", :version=>2}
got: {:currency=>"EUR", :version=>1}
(compared using ==)
Diff:
@@ -1,3 +1,3 @@
:currency => "EUR",
-:version => 2,
+:version => 1,
Actual result
NoMethodError: undefined method `values' for nil:NilClass
Backtrace shows the error is from lib/enumerize/predicatable.rb:20:in 'predicate_method?'
This is because rspec calls obj.respond_to?(:matches?)
to show the failure message.
The problem is fixed if predicate_method?
is changed to
method[-1] == '?' && @attr && @attr.values.include?(method[0..-2])
julianalucena commented
Any updates on this?