RSpec Test: has_many and belongs_to conflicts

Hello everyone,

I am having a hard time testing that my has_many and belongs_to relationships are mapped to the correct DB columns. Does anyone have any suggestions or good strategies for testing that these relationships are properly mapped throughout an application?

An example follows:

Let's say I have two models: Person and PhoneNumber. The Person model has two fields which should map to PhoneNumber, namely primary_number_id and fax_number_id. In my models, I could have something like:

class Person < ActiveRecord::Base   belongs_to :primary_number, :class_name => 'PhoneNumber', :foreign_key => 'primary_number_id'   belongs_to :fax_number, :class_name => 'PhoneNumber', :foreign_key => 'fax_number_id' end

class PhoneNumber < ActiveRecord:Base   has_many :person_primary , :class_name => 'Patient', :foreign_key => 'primary_number_id'   has_many :person_fax , :class_name => 'Patient', :foreign_key => 'fax_number_id' end

Using RSpec, I would be able to ensure that these relationships do indeed exist, but I know no way of confirming that they are mapped to the correct column, and have found no way of ensuring that some other relationship isn't mapping to the same DB column and possibly replacing the values down the line (for example, if both belongs_to relationships above were mapped to the same :class_name/:foreign_key combination.. or even some other relationship from another model, etc...) I guess what is needed is some way of testing that relationships do not conflict with each other.

I hope my example is clear enough. Thoughts?

Thanks in advance!

Luis

Luis Romero wrote in post #962011:

Hello everyone,

I am having a hard time testing that my has_many and belongs_to relationships are mapped to the correct DB columns. Does anyone have any suggestions or good strategies for testing that these relationships are properly mapped throughout an application?

Rails is well tested, so don't test it further. Instead, make sure you've called has_many and belongs_to correctly. The easiest way to do that is by using reflect_on_association.

Best,

Thank you Marnen, this is exactly what I needed...Not sure why I hadn't run across this method before....

Luis