我正在尝试使用shoulda matchers在rails中测试has_one:through关系。
我的关系结构看起来像这样(它是反向多态关联 - https://gist.github.com/runemadsen/1242485)
class Container < ActiveRecord::Base
has_many :contents
has_many :videos, through: :contents, source: :item, source_type: "Video"
end
class Content < ActiveRecord::Base
belongs_to :container, dependent: :destroy
belongs_to :item, polymorphic: true, dependent: :destroy
end
class Video < ActiveRecord::Base
has_one :content, as: :item
has_one :container, through: :contents
end
这是我在Rspec中的shoulda matcher代码:
# video_spec.rb
it { should have_one(:container).through(:contents) }
我得到的错误是:
undefined method `klass' for nil:NilClass
任何人都可以告诉我为什么我收到此错误以及如何正确测试此关联?
答案 0 :(得分:0)
假设你的全部你的spec文件中的代码(如果你只是发布一个修剪过的版本,我道歉),那么你需要将shoulda匹配器嵌套在{{1}下阻止describe
类:
Video
您收到的错误表示被测对象为describe Video do
it { should have_one(:container).through(:contents) }
end
。通过将规范嵌套在nil
类的describe
块中,受测试的主题隐含为Video
类。
在documentation in the source code取得一个高峰,它有很多很好的例子。