Shoulda matchers have_many con nombre de relación personalizado

¿Cómo pruebo esta relación de ActiveRecord usando los emparejadores shoulda ?

Modelos

class User < ActiveRecord::Base has_many :articles end class Article < ActiveRecord::Base belongs_to :author, class_name: 'User' end 

Prueba

 describe User do it { should have_many(:articles) } end 

Estoy recibiendo el siguiente error:

 1) User should have many articles Failure/Error: it { should have_many(:articles) } Expected User to have a has_many association called articles (Article does not have a user_id foreign key.) # ./spec/models/user_spec.rb:4:in `block (2 levels) in ' 

Por lo tanto, obviamente se espera que el campo de relación se llame user_id debido al nombre de clase de usuario. Espero que tenga que haber algún método de prueba que pueda usarse para anular esta expectativa como

 it { should have_many(:articles).as(:owner) } 

Pero no puedo encontrar nada igual. ¿Me estoy perdiendo algo obvio?

Los emparejadores deberían incluir una opción .with_foreign_key() .

https://github.com/thoughtbot/shoulda-matchers#have_many

Así que en tu ejemplo:

 describe User do it { should have_many(:articles).with_foreign_key('author_id') } end 

Que es como debe ser tu modelo, creo:

 class User < ActiveRecord::Base has_many :articles, foreign_key: "author_id" end