我正在玩一个关于在RSpec中通过关联测试has_many的示例。 我正在接受
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
答案 0 :(得分:8)
嗯,模型对象上没有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
(例如来自shoulda-matcher documentation)
只需将gem 'shoulda-matchers'
添加到Gemfile
,您就可以使用该语法。