[rspec-users] rspec and shoulda have_indices
David Chelimsky
dchelimsky at gmail.com
Fri Sep 2 19:20:03 EDT 2011
I moved your post to the bottom. Please read http://idallen.com/topposting.html
On Sep 2, 2011, at 5:58 PM, slavix wrote:
> On Sep 2, 6:17 am, David Chelimsky <dchelim... at gmail.com> wrote:
>> On Sep 2, 2011, at 4:12 AM, slavix wrote:
>>
>>> Hello,
>>> I am developing a rails 3.1 app. My Gemfile has shoulda gems
>>> Gemfile
>>> ..
>>> gem "shoulda"
>>> gem "shoulda-matchers"
>>
>> You only need shoulda-matchers if you're using rspec.
>>
>>> In a model spec I have
>>> spec file
>>> it { should have_indices([:user, :currency]) }
>>
>>> And I get this error...
>>
>>> NoMethodError:
>>> undefined method `has_indices?' for #<Balance:0xf3b860c>
>>
>> When there is no have_xxx method defined, rspec-expectations implements method_missing such that it assumes you want to send the object the has_xxx? predicate. What your experiencing suggests that there is no have_indices method. Looking athttp://rdoc.info/github/thoughtbot/shoulda-matchers/master/Shoulda/Ma..., I see a singular have_db_index matcher, but I don't see a pluralized one, so perhaps this method doesn't exist. If it does, then something is wrong with your configuration, as it is not being made available.
> Thanks,
> I updated spec with correct statements
>
> it { should have_db_index([:user, :currency, :tradable]) }
> ----------
> and my db (dev and test) has the indexes
>
> Indexes:
> Action Keyname Type Unique Packed Field Cardinality Collation Null
> Comment
> Edit Drop PRIMARY BTREE Yes No id 0 A
> Edit Drop index_balances_on_currency_id BTREE No No currency_id 0 A
> YES
> Edit Drop index_balances_on_tradable_id BTREE No No tradable_id 0 A
> YES
> Edit Drop index_balances_on_user_id BTREE No No user_id 0
>
> but I get an error running rspec
> 2) Balance shoulda validations
> Failure/Error: it { should
> have_db_index([:user, :currency, :tradable]) }
> Expected Balance to have a index on columns user and currency
> and tradable ()
The indexes are on xxx_id. Try { should have_db_index([:user_id, :currency_id, :tradable_id]) }
More information about the rspec-users
mailing list