Почему неопределенный метод has_many в примере Rspec? - PullRequest
4 голосов
/ 22 сентября 2011

Я играю с Примером по тестированию has_many через ассоциацию в RSpec.Я получаю

   1) Foo specifies items
       Failure/Error: subject.should have_many(:items)
       NoMethodError:
         undefined method `has_many?' for #
       # ./spec/models/foo_spec.rb:10

Мой вопрос: почему has_many будет неопределенным?

Спецификация:

describe Foo do
  it "specifies items" do
    subject.should have_many(:items)
  end
end

Мои модели:

foo.rb:

 class Foo < ActiveRecord::Base
   has_many :bars
   has_many :items, :through => :bars
 end

bar.rb:

class Bar < ActiveRecord::Base
  belongs_to :foo
  belongs_to :item
end

и item.rb:

class Item < ActiveRecord::Base
  has_many :foos, :through => :bars
  has_many :bars
end

1 Ответ

8 голосов
/ 22 сентября 2011

Ну, на модельных объектах нет метода has_many?rspec-rails по умолчанию не предоставляет такого сопоставителя.Однако, shoulda-matchers gem делает:

describe Post do
  it { should belong_to(:user) }
  it { should have_many(:tags).through(:taggings) }
end

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

(пример из musta-matchers документация )

Просто добавьте gem 'shoulda-matchers' к вашему Gemfile, и выуметь использовать этот синтаксис.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...